微信小程序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 相关文章推荐
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
浅析script标签中的defer与async属性
Nov 30 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
vue项目中使用fetch的实现方法
Apr 25 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 Javascript
弱类型语言javascript中 a,b 的运算实例小结
Aug 07 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
目录,文件操作详谈―PHP
2006/11/25 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
Linux中为php配置伪静态
2014/12/17 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
php目录拷贝实现方法
2015/07/10 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python使用matplotlib绘制热图
2018/11/07 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
描述内存分配方式以及它们的区别
2016/10/15 面试题
安全标准化实施方案
2014/02/20 职场文书
新农村建设标语
2014/06/24 职场文书
思想品德评语大全
2014/12/31 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers