收藏
评论

canvas绘制圆角头像

使用canvas的arc方法


circleImg(ctx, img, x, y, r) {    ctx.save();    var d =2 * r;    var cx = x + r;    var cy = y + r;    ctx.arc(cx, cy, r, 0, 2 * Math.PI);    ctx.clip();    ctx.drawImage(img, x, y, d, d);    ctx.restore();  }

收藏

12 个评论

  • 苏锦华
    苏锦华
    2022-09-08

    circleImg(ctx, img, x, y, r) {

          ctx.save();

          var d =2 * r;

          var cx = x + r;

          var cy = y + r;

          ctx.arc(cx, cy, r, 0, 2 * Math.PI);

          ctx.clip();

          ctx.closePath(); 

          ctx.drawImage(img, x, y, d, d);

          ctx.beginPath(); 

          ctx.restore();

        }

    2022-09-08
    赞同
    回复
  • qiang
    qiang
    2020-11-09

    ctx.clip(); 只能操作一次,如需操作多次需要 ctx.save();   ctx.restore();

          ctx.save();         //先调用 ctx.save(),不然的话ios有Bug,不能绘制第二次,比如你绘制一个有圆角的矩形,再绘制一个圆头像,如果不调用save是不行的
                ctx.beginPath(); //开始绘制
                ctx.arc(width / 2 + left, height / 2 + top, width / 20, Math.PI * 2, false);
                ctx.clip(); 
                ctx.drawImage(imgInfo.img, 
                    left, 
                    top, 
                    width, 
                    height); // 推进去图片
                ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
    



    2020-11-09
    赞同
    回复 1
    • qiang
      qiang
      2020-11-09
      不管是第一次还是最后一次,要裁剪之前最好都调用save,裁剪之后调用  restore
      2020-11-09
      回复
  • 彭涛 Chris
    彭涛 Chris
    2018-07-17

    绘图方案可以尝试下 https://github.com/Kujiale-Mobile/Painter  的实现方案,在绘制图片时,把 borderRadius 设置为一半的长度,就时圆形了

    2018-07-17
    赞同
    回复
  • Code Weaver
    Code Weaver
    2018-03-09

    之前画的图 有保存上下文,然后再drawImage吗

    2018-03-09
    赞同
    回复
  • Άδης
    Άδης
    2018-03-09

    是的

    2018-03-09
    赞同
    回复
  • Code Weaver
    Code Weaver
    2018-03-09

    你想让 图片盖住画的圆吗

    2018-03-09
    赞同
    回复
  • Άδης
    Άδης
    2018-03-09

    就是我遇到个奇怪的问题,图片是最后画上去的,但图片却被前面画的给盖住了,这个问题大概是什么原因呢?

    2018-03-09
    赞同
    回复
  • 茅十八
    茅十八
    2018-02-05

    收藏

    2018-02-05
    赞同
    回复
  • 三季度
    三季度
    2018-01-31

     https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=0002c4eb63c0e0790646b571c5b400&token=1586959053&lang=zh_CN

    有空帮我看看我的问题

    2018-01-31
    赞同
    回复
  • 三季度
    三季度
    2018-01-31

     - -同道中人。。。

    2018-01-31
    赞同
    回复

正在加载...

登录 后发表内容