接口返回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()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答