微信小程序canvas绘制圆角base64图片的实现
接口返回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){ constfilePath=`${wx.env.USER_DATA_PATH}/tmpbase64.png`; constbuffer=wx.base64ToArrayBuffer(base64data.buffer); letthat=this; fsm.writeFile({ filePath, data:buffer, encoding:'binary', success(){ that.setData({ qrcodeUrl:filePath//得到http://usr/tmpbase64.png }) }, fail(){ reject(newError('ERROR_BASE64SRC_WRITE')); }, }); },
使用获得的本地图片绘制圆角二维码
varqrW=150;//绘制的二维码宽度 varqrH=150;//绘制的二维码高度 varqr_x=540;//绘制的二维码在画布上的位置 varqr_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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。