微信小程序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 相关文章推荐
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
jQuery Ajax async=>false异步改为同步时,解决导致浏览器假死的问题
Jul 22 jQuery
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
Jul 25 Javascript
vue-amap根据地址回显地图并mark的操作
Nov 03 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
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php银联网页支付实现方法
2015/03/04 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
教你安装python Django(图文)
2013/11/04 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
毕业生的求职信范文分享
2013/12/04 职场文书
自荐信写法介绍
2014/01/25 职场文书
《我的信念》教学反思
2014/02/15 职场文书
敬老院标语
2014/06/27 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
python脚本框架webpy模板赋值实现
2021/11/20 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python