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

摘要:后台返回accessToken,小程序请求获取小程序码;将生成的小程序码绘制到海报上;创建离屏 2D canvas 实例,获取 context。注意这里必须要与创建时的 type 一致

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()
}
作者:无聊猿,公众号【无聊猿】
原文链接:https://www.cnblogs.com/wuliaoyuan/p/15824424.html


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_11053