微信小程序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简化Ajax开发 Ajax开发入门
Oct 14 Javascript
jQuery中add实现同时选择两个id对象
Oct 22 Javascript
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
jquery表单验证需要做些什么
Nov 17 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
Vuex中mutations与actions的区别详解
Mar 01 Javascript
vue使用nprogress实现进度条
Dec 09 Javascript
vue使用echarts画组织结构图
Feb 06 Vue.js
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
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
js tab效果的实现代码
2009/12/26 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
python读写二进制文件的方法
2015/05/09 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python数据封装json格式数据
2018/03/04 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
离职证明范本
2015/06/12 职场文书
办公室规章制度范本
2015/08/04 职场文书
数学复习课教学反思
2016/02/18 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python