// 画圆角
roundRect(ctx, x, y, w, h, r) {
var min_size = Math.min(w, h);
if (r > min_size / 2) r = min_size / 2;
// 开始绘制
ctx.beginPath();
ctx.moveTo(x + r, y);
ctx.arcTo(x + w, y, x + w, y + h, r);
ctx.arcTo(x + w, y + h, x, y + h, r);
ctx.arcTo(x, y + h, x, y, r);
ctx.arcTo(x, y, x + w, y, r);
ctx.closePath();
return ctx;
},
// 需要切圆角的头像
const ctx = canvas.getContext('2d')
const avatar = canvas.createImage();
avatar.src = 'https://img1.baidu.com/it/u=3083309252,921836114&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1658509200&t=c9387884f27707bd340073778d6c17cc';
avatar.onload = () => {
// 创建图片纹理
ctx.save()
this.roundRect(ctx, this.data.textObj.avatarIconX, this.data.textObj.avatarIconY, 50, 50, 7)
ctx.clip()
ctx.drawImage(avatar, this.data.textObj.avatarIconX, this.data.textObj.avatarIconY, 50, 50);
ctx.restore()
}
- 保存裁切前的canvas
- 画圆角矩形
- 将canvas裁切成你所画的圆角矩形
- 放入图片
- 恢复到裁切前的canvas(此步骤不会影响第四步)