【微信小程序】微信小程序保存二维码海报到相册,以及解决二维码不够清晰的问题

小程序保存二维码海报

这里写图片描述

  • 添加 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继承

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值