微信小程序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 设置标题的自动翻转
Oct 03 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
Oct 16 Javascript
关于javascript模块加载技术的一些思考
Nov 28 Javascript
jquery实现select下拉框美化特效代码分享
Aug 18 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
使用ES6语法重构React代码详解
May 09 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
Sep 15 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
使用node搭建自动发图文微博机器人的方法
Mar 22 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
Vue的props父传子的示例代码
May 20 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 常用的系统函数
2017/02/07 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
新浪的图片新闻效果
2007/01/13 Javascript
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
python实现多线程端口扫描
2019/08/31 Python
通过python检测字符串的字母
2020/02/18 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
交通安全责任书范本
2014/07/24 职场文书
村干部任职承诺书
2015/01/21 职场文书
长城的导游词
2015/01/30 职场文书
农村婚庆主持词
2015/06/29 职场文书
公司会议开幕词
2016/03/03 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS