需求背景
一般在促销活动中,都会有一个活动海报进行宣传。有时候的海报是针对产品的,那么分享出去的海报是实时更新的。这里就以前端拿到相应的数据然后进行图片的绘制然后在进行分享,简单记录下代码的实现。
实现步骤
在 wxml 中放一个 canvas 的承载标签 imgCanvas
在海报的分享中,改变的部分大多数是产品信息和二维码,这里我们可以吧绘制图片写成一个方法函数然后需要的数据以参数的方式传递进来。
1 | export function setCanvasImage(productInfo, qrCode) { |
- 更具需求获取到海报的元信息,比如:背景图、商品图、logo 图、市场价、活动价等,然后对海报的样式进行绘制
- 首先我们先从参数中获取到我们的元信息
1 | const { productName, url, price, marketPrice, logo } = productInfo |
图片获取的是一个 url,我们在绘制海报的时候,需要把图片下载下来,然后才能进行绘制,因为图片获取的接口是个异步行为,我们用 promise 进行封装,获取图片完成之后才能进行绘制。
封装了一个单位转换函数,因为样式是基于px的
1 | export function rpxToPx(data = 0) { |
- 获取背景图片
1 | const bgImgPromise = new Promise((resolve, reject) => { |
- 获取产品图片
1 | const prdImgPromise = new Promise((resolve, reject) => { |
- 获取品牌 logo 图
1 | const logoImgPromise = new Promise((resolve, reject) => { |
- 获取二维码信息
1 | // 由于数据是base64所以是一下方法如果是url可以使用上面获取图片的方式拿到图片 |
- 接下来就是在画布上对获取的元素进行拼图和美化操作了
1 | return new Promise((resolve, reject) => { |
完整代码
整体实现一个分享海报的图片就上面这几步,可能根据具体的业务有相应的修改,但大体的步骤没有变化,代码有注释,不清楚的可以看下注释因该就懂了,贴上完整代码。
1 | /** |