由于看到的弹窗图片与保存的图片是两种大小,所以一开始看了些网上的其他教程,建议是搞两个canvas一个大的一个小的。实际过程中,采用了一个大的canvas,让其偏离视窗显示区域(不可见)并生成临时文件,弹窗的图片再使用img组件,引入临时文件,设置其高度;而保存的时候则直接下载临时文件。
虽然是实现了,但是后来在优化的过程中,这个方案也重新设计了。下面具体介绍下优化过的方案:
由于最后海报的图片大小为iphone6的两倍图(750*1334),所以这里弹窗的图片也即是canvas的大小,设计为对应的尺寸的某个比例。
弹窗图片的高度=视窗的高度-上下留白-按钮的高度-图片与按钮的距离imgHeight=100vh-40rpx*2-50rpx-15rpx弹窗图片的宽度/弹窗图片的高度=750/1334弹窗图片的宽度=(750/1334)*弹窗图片的高度由于像素只能是整数,所以这样绘制出来的图片可能底部会有1px的空白,所以在设置高度的时候可以再减掉1px,这不会影响视觉效果。
如果是网络图片,绘制背景图之前一定要先下载该图片,可通过wx.getImageInfo或wx.downloadFile下载图片,下载成功后将其塞进临时地址,然后使用wxcanvas的drawImage绘制。注意如果地址是base64的话,gif是不行的。
ctx.draw(false,function(e){setTimeout(()=>{//修改增加的options.callback&&options.callback(e)},20);})另:目前这些绘制小程序二维码的库都是在一个单独的新canvas中完成的,只要对源码稍作修改,就可以提供另一个接口,直接在一个现有的canvas(表示canvas中一开始绘制了其他内容)中绘制。