微信小程序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代码
Oct 19 Javascript
window.name代替cookie的实现代码
Nov 28 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
一个网页标题title的闪动提示效果实现思路
Mar 22 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
解决vue里碰到 $refs 的问题的方法
Jul 13 Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 Javascript
微信小程序如何获取用户信息
Jan 26 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
JS简单表单验证功能完整示例
Jan 26 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
我的论坛源代码(二)
2006/10/09 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
php 如何获取数组第一个值
2013/08/06 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python探索之自定义实现线程池
2017/10/27 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
python实现简单学生信息管理系统
2020/04/09 Python
python怎么调用自己的函数
2020/07/01 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
设计师珠宝:Ylang 23
2018/05/11 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
EJB的激活机制
2013/10/25 面试题
仓库组长岗位职责
2014/01/29 职场文书
励志演讲稿范文
2014/04/29 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
英文求职信范文
2014/05/23 职场文书
装配出错检讨书
2014/09/23 职场文书
2014年班干部工作总结
2014/11/25 职场文书
MySQL数据管理操作示例讲解
2022/12/24 MySQL