微信小程序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 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
js正则表达式中test,exec,match方法的区别说明
Jan 29 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
浅析JavaScript异步代码优化
Mar 18 Javascript
react PropTypes校验传递的值操作示例
Apr 28 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
利用JavaScript写一个简单计算器
Nov 27 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实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
python高阶爬虫实战分析
2018/07/29 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python模块导入的细节详解
2018/12/10 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
汽车运用工程毕业生自荐信
2013/10/29 职场文书
办公文员的工作岗位职责
2013/11/12 职场文书
小班秋游活动方案
2014/02/22 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
旅游安全责任协议书
2016/03/22 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js