微信小程序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 相关文章推荐
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
关于js new Date() 出现NaN 的分析
Oct 23 Javascript
JS中位置与大小的获取方法
Nov 22 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
收集前端面试题之url、href、src
Mar 22 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
javascript简单实现深浅拷贝过程详解
Oct 08 Javascript
js DOM的事件常见操作实例详解
Dec 16 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
php whois查询API制作方法
2011/06/23 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
js计数器代码
2006/11/04 Javascript
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python中变量交换的例子
2014/08/25 Python
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
法律专业实习鉴定
2013/12/22 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
优秀团队获奖感言
2014/02/19 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
节约用电通知
2015/04/25 职场文书
首席执行官观后感
2015/06/03 职场文书
如何写观后感
2015/06/19 职场文书
导游词之张家界
2019/10/31 职场文书