ICanvas - 图形系统
IQrcode
二维码图形类,用于在画布上绘制可配置的二维码,可支持带圆角背景矩形、描边与前景色控制。
属性
继承自 Shape 的所有属性,并包含以下特定属性:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
type | string | "IQrcode" | 图形类型标识 |
radius | number | 0 | 背景矩形圆角半径(非二维码点阵圆角) |
foreground | string | "#000000" | 二维码前景块颜色 |
qrcodeText | string | "" | 二维码内容文本 |
fill | string | "" | 背景填充色(可用于留白/底色) |
stroke | string | "" | 背景描边色 |
strokeWidth | number | 1 | 背景描边宽度 |
说明:二维码点阵绘制会铺满设置的 width×height 区域;fill/stroke 作用于背景路径(支持圆角)。
方法
构造函数
typescript
constructor(config: IShapeOptional, canvas: ICanvas)config: 配置对象,支持qrcodeText、foreground、radius等canvas: 画布实例
设置方法
setRadius(value: number): IQrcode
设置背景矩形圆角半径。
setQrcodeLabel(text: string): void
设置二维码内容文本,设置后会标记为需更新并在下次绘制时生效。
继承方法
继承自 Shape 的常用方法,包括但不限于:
draw(ctx: CanvasRenderingContext2D)isPointInPath(x: number, y: number, shapeId: string): booleangetBoundRect(): IShapeBoundRectsetWidth(value: number),setHeight(value: number)等(已重写,均以左上角为定位)
使用示例
typescript
// 创建一个二维码
const qr = new IQrcode({
x: 100,
y: 100,
width: 200,
height: 200,
radius: 16, // 背景圆角
fill: "#ffffff", // 背景色(用于留白)
stroke: "#e5e6eb",
strokeWidth: 1,
foreground: "#111111", // 前景点阵颜色
qrcodeText: "https://tmui.design"
}, canvas);
canvas.addShape(qr);
// 动态更新二维码内容
qr.setQrcodeLabel("TMUI4X · Canvas QR");行为说明
- 二维码纠错级别当前为固定高等级("H"),有利于在中心覆盖图标或有轻微遮挡时保持可扫性。
- 点阵单元大小按
width / 实际点阵宽度自动计算,当前未内置"静区"边距;如需留白,建议:- 使用
fill设为背景白色,并在外层通过布局留边,或 - 适当增大
width/height并在容器中留出间距。
- 使用
foreground控制点阵颜色;背景与描边由fill/stroke控制。
注意事项
- 请确保
qrcodeText非空,否则绘制的二维码无意义。 radius仅影响背景矩形的圆角,不影响二维码点阵本身形状。- 当
stroke非空时,边界矩形计算会包含strokeWidth/2的扩展。 - 对于超小尺寸二维码,可能因采样与显示器物理像素导致观感粗糙,建议
width ≥ 160。 - 如需在二维码中心叠加 Logo,建议使用更高容错级别(当前已为 "H"),并预留足够的背景留白。
