微信小程序canvas绘制圆角base64图片的实现


Posted in Javascript onAugust 18, 2019

接口返回base64格式小程序二维码,以往的做法是需要再调一个接口去拿到jpg/png格式的图片。如果没有这个接口呢,是不是也可以?然而小程序canvas并不支持直接使用base64绘制,好在小程序的文件系统提供了方法,可以把base64经过进一步处理转成本地图片。

获取base64格式图片

getXcxQrcode() {
 wx.request({
 url: app.globalData.globalUrl + "/get_wx_code",
 data: {
 token: app.globalData.weixin_token,
 scene: app.globalData.page_key,
 page: "pages/index/index"
 },
 success: (res) => {
 if (data.data.success) {
  this.base64src(data.data)
 }
 }
 })
}

base64格式图片转换成本地图片

base64src(base64data) {
 const filePath = `${wx.env.USER_DATA_PATH}/tmpbase64.png`;
 const buffer = wx.base64ToArrayBuffer(base64data.buffer);
 let that = this;
 fsm.writeFile({
  filePath,
  data: buffer,
  encoding: 'binary',
  success() {
   that.setData({
    qrcodeUrl: filePath // 得到http://usr/tmpbase64.png
   })
  },
  fail() {
   reject(new Error('ERROR_BASE64SRC_WRITE'));
  },
 });
},

使用获得的本地图片绘制圆角二维码

var qrW = 150; //绘制的二维码宽度
var qrH = 150; //绘制的二维码高度
var qr_x = 540; //绘制的二维码在画布上的位置
var qr_y = 960; //绘制的二维码在画布上的位置
ctx.save();

ctx.beginPath(); //开始绘制
//先画个圆  前两个参数确定了圆心 (x,y) 坐标 第三个参数是圆的半径 四参数是绘图方向 默认是false,即顺时针
ctx.arc(qrW / 2 + qr_x, qrH / 2 + qr_y, qrW / 2, 0, Math.PI * 2, false);

ctx.clip(); //画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
ctx.drawImage(this.data.qrcodeUrl, qr_x, qr_y, qrW, qrH);
ctx.draw()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
很棒的学习jQuery的12个网站推荐
Apr 28 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
浅谈Angular6的服务和依赖注入
Jun 27 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
vue-router 路由传参用法实例分析
Mar 06 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 #Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 #Javascript
js 实现 list转换成tree的方法示例(数组到树)
Aug 18 #Javascript
详解ES6 Promise的生命周期和创建
Aug 18 #Javascript
vue-cli3配置与跨域处理方法
Aug 17 #Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 #Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
Aug 17 #Javascript
You might like
基于mysql的论坛(3)
2006/10/09 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
JS控制表格隔行变色
2006/06/26 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
easyui validatebox验证
2016/04/29 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
Python中AND、OR的一个使用小技巧
2015/02/18 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
工程管理专业个人求职信范文
2013/12/07 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
个人融资协议书
2014/10/02 职场文书
2015年入党决心书
2015/02/05 职场文书
施工员岗位职责
2015/02/10 职场文书
统计员岗位职责范本
2015/04/14 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python