微信小程序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截取中文字符串的实现代码
Dec 22 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
Sep 29 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
微信小程序实现下载进度条的方法
Dec 08 Javascript
js正则相关知识点专题
May 10 Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
Jul 17 Javascript
介绍一下28个JS常用数组方法
May 06 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和ACCESS写聊天室(七)
2006/10/09 PHP
php 无限分类的树类代码
2009/12/03 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
简单介绍django提供的加密算法
2019/12/18 Python
python线程join方法原理解析
2020/02/11 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
详解Python中的路径问题
2020/09/02 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
行政管理毕业生自荐信
2014/02/24 职场文书
餐厅筹备计划书
2014/04/25 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
纪委立案决定书
2015/06/24 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript