微信小程序canvas截取任意形状的实现代码

 更新时间:2020年01月13日 14:55:18   作者:吖吖PaperPen  
这篇文章主要介绍了微信小程序canvas截取任意形状的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

最近在研究拼图验证码实现,需要对图片的部分模块进行特殊形状切割出一小块,明白后原来是如此简单,第一步就是将所有绘制的形状用线勾出(直线、弧线、贝塞尔曲线都可以)形成闭环,第二步就是切割绘制,第二步不麻烦,麻烦的只是第一步,需要一些计算,所以会在以后,尽力的多保存一些特殊形状的方法。

比如:

代码

drawPic(x,y,r){
  // const ctxBackground = wx.createCanvasContext('canvasBackground')
  const ctxBackground = wx.createCanvasContext('canvasBackground')
  ctxBackground.save();
  //开始一个新的绘制路径
  ctxBackground.beginPath();
  //设置路径起点坐标
  ctxBackground.moveTo(x, y);
  ctxBackground.arcTo(x, y - r, x + r, y - r, r);
  ctxBackground.lineTo(x + 2 * r, y - r);
  ctxBackground.arcTo(x + 2 * r, y - 2 * r, x + 3 * r, y - 2 * r, r);
  ctxBackground.arcTo(x + 4 * r, y - 2 * r, x + 4 * r, y - r, r);
  ctxBackground.lineTo(x + 5 * r, y - r);
  ctxBackground.arcTo(x + 6 * r, y - r, x + 6 * r, y, r);
  ctxBackground.lineTo(x + 6 * r, y + r);
  ctxBackground.arcTo(x + 7 * r, y + r, x + 7 * r, y + 2 * r, r);
  ctxBackground.arcTo(x + 7 * r, y + 3 * r, x + 6 * r, y + 3 * r, r);
  ctxBackground.lineTo(x + 6 * r, y + 4 * r);
  ctxBackground.arcTo(x + 6 * r, y + 5 * r, x + 5 * r, y + 5 * r, r);
  ctxBackground.lineTo(x + 4 * r, y + 5 * r);
  ctxBackground.arcTo(x + 4 * r, y + 4 * r, x + 3 * r, y + 4 * r, r);
  ctxBackground.arcTo(x + 2 * r, y + 4 * r, x + 2 * r, y + 5 * r, r);
  ctxBackground.lineTo(x + r, y + 5 * r);
  ctxBackground.arcTo(x, y + 5 * r, x, y + 4 * r, r);
  ctxBackground.lineTo(x, y + 3 * r);
  ctxBackground.arcTo(x + r, y + 3 * r, x + r, y + 2 * r, r);
  ctxBackground.arcTo(x + r, y + r, x, y + r, r);
  ctxBackground.lineTo(x, y);
  //先关闭绘制路径。注意,此时将会使用直线连接当前端点和起始端点。
  ctxBackground.closePath();
  ctxBackground.clip();
  ctxBackground.stroke(); //画线轮廓
  wx.getImageInfo({
   src: 'cloud://normal-env/000060.jpg',
   success: function (res) {
    ctxBackground.drawImage(res.path, 0, 0, 256, 191);
    ctxBackground.restore();
    ctxBackground.draw();
   }
  })
 }

总结

以上所述是小编给大家介绍的微信小程序canvas截取任意形状的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • JavaScript动态添加列的方法

    JavaScript动态添加列的方法

    这篇文章主要介绍了JavaScript动态添加列的方法,实例分析了javascript操作table表单的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • js下通过getList函数实现分页效果的代码

    js下通过getList函数实现分页效果的代码

    js下通过getList函数实现分页效果的代码,需要通过js分页的朋友可以参考下。
    2010-09-09
  • JS利用Intl解决前端日期和时间的格式化详解

    JS利用Intl解决前端日期和时间的格式化详解

    Intl 是一个全局对象,它的主要用途就是展示国际化信息,可以将字符串,数字和日期和时间转换为指定地区的格式。这篇文章就来和大家聊聊如何利用Intl解决前端日期和时间的格式化吧
    2023-03-03
  • gulp教程_从入门到项目中快速上手使用方法

    gulp教程_从入门到项目中快速上手使用方法

    下面小编就为大家带来一篇gulp教程_从入门到项目中快速上手使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • JavaScript自定义日历实现签到功能

    JavaScript自定义日历实现签到功能

    这篇文章主要为大家详细介绍了JavaScript自定义日历实现签到功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 小程序实现文字循环滚动动画

    小程序实现文字循环滚动动画

    这篇文章主要为大家详细介绍了小程序实现文字循环滚动动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • js实现简单的拖拽效果

    js实现简单的拖拽效果

    这篇文章主要为大家详细介绍了js实现简单的拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 基于Web Components实现一个日历原生组件

    基于Web Components实现一个日历原生组件

    这篇文章主要为大家详细介绍了如何利用Web Components实现一个简单的日历原生组件,文中的示例代码讲解详细,需要的小伙伴可以了解一下
    2023-07-07
  • bootstrap datetimepicker控件位置异常的解决方法

    bootstrap datetimepicker控件位置异常的解决方法

    这篇文章主要为大家详细介绍了bootstrap datetimepicker控件位置异常的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 网络之美 JavaScript中Get和Set访问器的实现代码

    网络之美 JavaScript中Get和Set访问器的实现代码

    前两天IE9 Beta版发布了,对于从事Web开发的朋友们来说真是个好消息啊,希望将来有一天各个浏览器都能遵循统一的标准。今天要和大家分享的是JavaScript中的Get和Set访问器,和C#中的访问器非常相似。
    2010-09-09

最新评论