知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
總結(jié):小程序CANVAS遇到的坑
發(fā)表時間:2021-2-3
發(fā)布人:葵宇科技
瀏覽次數(shù):111
項目需要
從后臺返回的二維碼和背景圖片返回到前端,前端把各個字段值畫在canvas上生成海報,要在畫布上添加二維碼,可保存在本地。
第一個坑 這里從后臺傳過來的圖片為網(wǎng)絡(luò)圖片需要先轉(zhuǎn)化為本地的,看開發(fā)者工具文檔用第二個坑
第三個坑 就是后臺的背景圖片是從數(shù)據(jù)可拿過來的為
第四個坑 小程序長按圖片并不能保存,需要額外的寫一個方法保存到本地相冊
wx.getImageInfo
的方法可以轉(zhuǎn)換,canvas
的draw
方法默認(rèn)為 false
也就是不保存之前所畫的內(nèi)容,因為我的文字和二維碼都需要寫在背景圖上,所以改為 true
。注意繪制的順序,先把背景圖底圖畫上,然后是文字或者其他的,
wx.getImageInfo({
//that.data.preImg是我后臺返回過來的動態(tài)數(shù)據(jù)二維碼
src: 'http://www域名.com'+that.data.preImg,
success: function (res) {
context.drawImage(res.path, 270, 560, 80,80);
that.creatText(context);//繪制文字的方法
context.draw(true);//保存之前繪制的
}
})
然后相應(yīng)的在
第二個坑 canvas
畫布的繪制是不分先后的我的背景圖片會把文字覆蓋掉,在這里我把需要繪制的文字寫在另外一個方法中,然后在 wx.getImageInfo
方法成功后調(diào)用這個方法,要把 context
傳進去:
var context = wx.createCanvasContext('mycanvas');
第三個坑 就是后臺的背景圖片是從數(shù)據(jù)可拿過來的為image
類型,在后臺轉(zhuǎn)化為base64傳到前端,我需要把base64轉(zhuǎn)化為可以顯示的圖片,從網(wǎng)上找了好多方法都是直接顯示在頁面上,
"data:image/png;base64,{{img}}"/>
而這個不是我要的結(jié)果,又找到了這個方法:
//將后臺傳過來的海報背景base64格式轉(zhuǎn)化為圖片
base64src:function(code,cb){
const fsm = wx.getFileSystemManager();
const timestamp = Date.parse(new Date())
// 自定義文件名
const FILE_BASE_NAME = 'tmp_base64src' + timestamp
// 文件系統(tǒng)中的用戶目錄路徑 (本地路徑)
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.png`;
// 將 base64 字符串轉(zhuǎn)成 ArrayBuffer 對象
const buffer = wx.base64ToArrayBuffer(code)
//同步
fsm.writeFileSync(
filePath,
buffer,
'base64'
)
cb(filePath)
this.setData({
bgIMg:filePath
})
//異步
// fsm.writeFile({
// filePath: filePath,
// data: buffer,
// encoding: 'base64',
// success: (res)=>{
// cb(filePath)
// this.setData({
// bgIMg:filePath
// })
// }
// })
}
注意: 前端繪制的一個弊端就是圖片生成時間太長,要base64轉(zhuǎn)圖片,還要繪制圖畫;后端繪制可能效果排版沒有前端那么好。
生成圖片保存到本地并顯示到頁面上(因為繪制圖畫時間較長,保存時需要setTimeout
延長一下)
setTimeout(function () {
wx.canvasToTempFilePath({
canvasId: 'mycanvas',
success: function (res) {
var tempFilePath = res.tempFilePath;//圖片地址
that.setData({
imagePath: tempFilePath,
canvasHidden:true
});
},
fail: function (res) {
console.log(res);
}
});
},1000);
第四個坑 小程序長按圖片并不能保存,需要額外的寫一個方法保存到本地相冊 wx.saveImageToPhotosAlbum
var that = this
wx.saveImageToPhotosAlbum({
filePath: that.data.imagePath,
success(res) {
wx.showModal({
content: '圖片已保存到相冊,趕緊曬一下吧~',
showCancel: false,
confirmText: '好的',
confirmColor: '#333',
success: function (res) {
if (res.confirm) {
// console.log('用戶點擊確定');
/* 該隱藏的隱藏 */
that.setData({
maskHidden: false
})
}
},fail:function(res){
console.log(res)
}
})
}
})
好了,繪制小程序海報到此為止了,有很多問題是可以在開發(fā)文檔中找到方法解決的,微信開放社區(qū) 里邊的大神還是挺多的可以問他們,期待微信小程序的完善。
相關(guān)案例查看更多
相關(guān)閱讀
- 搜索引擎優(yōu)化
- 專業(yè)網(wǎng)站建設(shè)公司
- 云南省建設(shè)廳官方網(wǎng)站
- 網(wǎng)站建設(shè)服務(wù)公司
- 網(wǎng)站開發(fā)
- 小程序開發(fā)聯(lián)系方式
- 云南小程序商城
- 云南網(wǎng)站建設(shè)哪家好
- 昆明軟件公司
- 網(wǎng)絡(luò)公司報價
- 云南網(wǎng)站設(shè)計
- 網(wǎng)站建設(shè)選
- 小程序開發(fā)
- 報廢車管理系統(tǒng)
- 網(wǎng)站開發(fā)公司哪家好
- 汽車報廢拆解管理系統(tǒng)
- 云南etc小程序
- 云南網(wǎng)站建設(shè)專家
- 云南旅游網(wǎng)站建設(shè)
- 云南企業(yè)網(wǎng)站
- python開發(fā)小程序
- 云南網(wǎng)站制作哪家好
- 公眾號模板消息
- 網(wǎng)站小程序
- 云南省城鄉(xiāng)建設(shè)廳網(wǎng)站
- 云南小程序開發(fā)推薦
- 網(wǎng)站排名優(yōu)化
- 小程序商城
- 云南網(wǎng)站建設(shè)公司
- 云南建設(shè)廳官方網(wǎng)站