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


Posted in Javascript onJanuary 13, 2020

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

比如:

微信小程序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 相关文章推荐
彪哥1.1(智能表格)提供下载
Sep 07 Javascript
子页向父页传值示例
Nov 27 Javascript
javascript中的作用域和上下文使用简要概述
Dec 05 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
javascript获取flash版本号的方法
Nov 20 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
webpack3之loader全解析
Oct 26 Javascript
每天学点Vue源码之vm.$mount挂载函数
Mar 11 Javascript
如何优雅地在Node应用中进行错误异常处理
Nov 25 Javascript
vue设置全局访问接口API地址操作
Aug 14 Javascript
详解Vue数据驱动原理
Nov 17 Javascript
js实现列表向上无限滚动
Jan 13 #Javascript
vue 组件销毁并重置的实现
Jan 13 #Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 #Javascript
微信小程序聊天功能的示例代码
Jan 13 #Javascript
js实现适配移动端的拖动效果
Jan 13 #Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 #Javascript
优化Vue中date format的性能详解
Jan 13 #Javascript
You might like
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
Python利用ansible分发处理任务
2015/08/04 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python生成器用法实例详解
2019/11/22 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
目标管理责任书
2014/04/15 职场文书
访谈节目策划方案
2014/05/15 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript