clip之后裁剪之外的区域不能绘图,绘画无效

在使用beginPath 、clip之前save一下,在clip之后restore,使用的canvas是小程序的canvas,img这里跟h5这里不一样,其他的api基本都一致

async function clipUserAvater ({
  canvasCtx,
  canvas,
  url,
  bg,
}: {
  canvas: any;
  canvasCtx: any;
  url?: string;
  bg: any;
}) {
  canvasCtx.save();
  const userImg = canvas.createImage();
  userImg.src = url ?? DefaultAvatar;
  userImg.crossOrigin = "anonymous";
  const imgRes = await new Promise(resolve => {
    userImg.onerror = () => {
      resolve(DefaultAvatar);
    };
    userImg.onload = () => {
      resolve(userImg);
    };
  });
  // 裁剪圆形头像
  canvasCtx.beginPath();
  canvasCtx.arc(
    20 + bg.width / 16,
    20 + bg.width / 16,
    bg.width / 16,
    0,
    Math.PI * 2,
  );
  canvasCtx.clip();
  canvasCtx.drawImage(
    imgRes,
    20,
    20,
    bg.width / 8,
    bg.width / 8,
  );
  canvasCtx.restore();
  return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值