小程序保存二维码海报
- 添加 canvas 元素poster
<canvas class="poster" canvas-id="poster" style="width:300rpx;height:300rpx;"></canvas>
- 给poster添加海报、二维码
initCanvas(){
var ctx = wx.createCanvasContext('poster')
ctx.drawImage('https://image.watsons.com.cn//upload/0851366c.png', 0, 0, 241, 368) //画海报
ctx.drawImage(qrCodeUrl, 70, 240, 120,120) //画二维码
ctx.draw()
this.save() //生成微信临时模板文件path
}
- 生成微信临时模板文件path
save(){
var self = this;
setTimeout(()=>{
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 241,
height: 368,
destWidth: 241,
destHeight: 368,
canvasId: 'poster',
success: function(res) {
console.log('save',res.tempFilePath)
self.saveUrl = res.tempFilePath //保存临时模板文件路径
},
fail:function(res){
// wx.showToast({
// title:'网络繁忙',
// icon:'none'
// })
return
}
})
},500)
}
- 保存到手机相册 wx.downloadFile 可以不要,因为此时saveUrl已经是wx.downloadFile,如果是第三方路径则需要先downloadFile
saveImageToPhotosAlbum(){
console.log(this.saveUrl)
wx.showLoading({
title:'下载中...'
})
var self = this;
wx.downloadFile({
url: self.saveUrl,
success: function(res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
wx.saveImageToPhotosAlbum({
filePath:res.tempFilePath,
success(result) {
wx.hideLoading()
wx.showToast({
title:'已保存至相册',
icon:'none',
})
},
fail(result){
wx.hideLoading()
wx.showToast({
title:'下载失败',
icon:'none',
})
}
})
}
},
fail(result){
wx.hideLoading()
wx.showToast({
title:'下载失败',
icon:'none',
})
}
})
},
解决海报中的二维码不够清晰的问题
- 添加 id 为generate的canvas,poster用作展示,generate用作保存
<canvas class="poster" canvas-id="poster" style="width:300rpx;height:300rpx;"></canvas>
<canvas class="generate" canvas-id="generate" style="width:1500rpx;height:2296rpx;"></canvas>
- 在generate 上 initCanvas
var ctx = wx.createCanvasContext('generate')
ctx.drawImage('https://image.watsons.com.cn//upload/0851366c.png', 0, 0, 750, 1148) //画海报
ctx.drawImage(QrCodeUrl, 300, 886, 150,150) //画二维码
ctx.draw()
this.save()
- 生成微信临时模板文件path ,同时生成展示用的海报
save(){ //保存二维码
var self = this;
setTimeout(()=>{
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 750,
height: 1148,
destWidth: 750,
destHeight: 1148,
canvasId: 'generate',
success: function(res) {
this.tempFilePath = res.tempFilePath
console.log('save',res.tempFilePath)
var ctx = wx.createCanvasContext('poster') //加载展示用的海报
ctx.drawImage(res.tempFilePath, 0, 0, 241, 368)
ctx.draw()
self.saveUrl = res.tempFilePath //保存临时模板文件路径
},
fail:function(res){
return
}
})
},500)
}
- 保存到手机相册
代码跟之前描述的一样
如果觉得我的文章对你有帮助,欢迎关注我的blog
相关知识点
【Javascript】深入理解async/await的实现,Generator+Promise = Async/Await
【Javascript】深入理解this作用域问题以及new运算符对this作用域的影响
【Javascript】手写运算符new创建实例并实现js继承