微信小程序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 相关文章推荐
Javascript的构造函数和constructor属性
Jan 09 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
Jul 04 Javascript
纯javascript判断查询日期是否为有效日期
Aug 24 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
Aug 14 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
详解vue 单页应用(spa)前端路由实现原理
Apr 04 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 Javascript
一起写一个即插即用的Vue Loading插件实现
Oct 31 Javascript
js实现弹窗效果
Aug 09 Javascript
微信小程序实现底部弹出框
Nov 18 Javascript
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
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 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python类装饰器实现方法详解
2018/12/21 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
如何对python的字典进行排序
2020/06/19 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
装潢设计专业推荐信模板
2013/11/26 职场文书
物业工作计划书
2014/01/10 职场文书
公司接待方案
2014/03/08 职场文书
个人违纪检讨书
2014/09/15 职场文书
期中考试复习计划
2015/01/19 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android