微信小程序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之end()和pushStack()使用介绍
Feb 07 Javascript
在js文件中如何获取basePath处理js路径问题
Jul 10 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
Oct 24 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
javascript每日必学之封装
Feb 23 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
Aug 24 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
在js文件中引入(调用)另一个js文件的三种方法
Sep 11 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php a simple smtp class
2007/11/26 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
分页栏的web标准实现
2011/11/01 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
python实现猜拳游戏
2020/03/04 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
毕业生医学检验求职信
2013/10/16 职场文书
成人毕业生自我鉴定
2013/10/18 职场文书
就职演讲稿范文
2014/05/19 职场文书
超市开店计划书
2014/09/15 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
北京天坛导游词
2015/02/12 职场文书
大学生社会实践感想
2015/08/11 职场文书
辅导员学期工作总结
2015/08/14 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
python中的3种定义类方法
2021/11/27 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis