微信小程序码生成及canvas绘制

  • A+
所属分类:Web前端
摘要

吐槽:某厂的开发文档写的跟屎一样

吐槽:某厂的开发文档写的跟屎一样

1、后台返回accessToken,小程序请求获取小程序码

uni.request({ 	url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + res.data.accessToken, 	method: 'POST', 	headers: { 		'Content-Type': 'json' 	}, 	responseType: 'arraybuffer', 	data: {							 		"scene": "a=1", // 参数 		"is_hyaline": true //透明底色 	}, 	success: (res) => { 		// 将返回的图片buffer生成图片,并保存至临时用户文件中 		const fs = wx.getFileSystemManager(); 		const FILE_BASE_NAME = 'code'; 		let filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.png`; 		fs.writeFileSync(filePath, res.data) 		// filePath就是图片的本地路径 		that.filePath = filePath 		that.qrcode(filePath) 	}, 	fail(e) { 		console.log(e) 	} }); 

2、将生成的小程序码绘制到海报上 --- canvas

	let that = this 	const query = wx.createSelectorQuery() 	query.select('#myCanvas') 		.fields({ 		node: true, 		size: true 		}) 		.exec((res) => { 						 			const canvas = res[0].node 			const ctx = canvas.getContext('2d')  			const headerImg = canvas.createImage(); 			const backImg = canvas.createImage();  			headerImg.src = that.filePath; 			backImg.src = '../../static/wish.png';               backImg.onload = () => { 				ctx.drawImage(backImg, 0, 0, 150, 100) 			}	  			headerImg.onload = () => { 				ctx.drawImage(headerImg, 0, 0, 150, 100) 			}											 	}) 				 

3、将生成的小程序码绘制到海报上 --- canvas离屏绘制

// 创建离屏 2D canvas 实例 				const canvas = wx.createOffscreenCanvas({ 					type: '2d', 					width: 300, 					height: 150 				}) 				// 获取 context。注意这里必须要与创建时的 type 一致 				const context = canvas.getContext('2d') 				// 创建一个图片 				const image = canvas.createImage() 				// 等待图片加载  				image.src = '../../static/wish.png' // 要加载的图片 url 				image.onload = () => { 					// 把图片画到离屏 canvas 上 					context.clearRect(0, 0, 300, 150) 					context.drawImage(image, 0, 0, 300, 150)  					// 获取画完后的数据 					const imgData = context.getImageData(0, 0, 300, 150) 					console.log(imgData)                                         // 图片的base64格式 					console.log(context.canvas.toDataURL()) 					that.src = context.canvas.toDataURL() 				}