微信小程序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 相关文章推荐
javascript 函数速查表
Feb 07 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
Jan 14 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
Bootstrap Scrollspy源码学习
Mar 02 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
关于JavaScript语句后面的分号问题
Dec 07 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
JavaScript控制台的更多功能
Apr 28 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
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
五段实用的js高级技巧
2011/12/20 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
PyQT实现多窗口切换
2018/04/20 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python使用Matlab命令过程解析
2020/06/04 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
2014年母亲节演讲稿范文
2014/05/07 职场文书
办公室管理规章制度
2015/08/04 职场文书
交通事故责任认定书
2015/08/06 职场文书
教师理论学习心得体会
2016/01/21 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技