轻松生成小程序分享海报轻松生成小程序分享海报
小程序小程序海报组件海报组件
需求需求
小程序分享到朋友圈只能使用小程序码海报来实现,生成小程序码的方式有两种,一种是使用后端方式,一种是使用小程序自
带的canvas生成;后端的方式开发难度大,由于生成图片耗用内存比较大对服务端也是不小的压力;所以使用小程序的
canvas是一个不错的选择,但由于canvas水比较深,坑比较多,还有不同海报需要重现写渲染流程,导致代码冗余难以维
护,加上不同设备版本的情况不一样,因此小程序海报生成组件的需求十分迫切。
在实际开发中,我发现海报中的元素无非一下几种,只要实现这几种,就可以通过一份配置文件生成各种各样的海报了。
海报中的元素分类海报中的元素分类
(此图片来源于网络,如有侵权,请联系删除! )
要解决的问题要解决的问题
单位问题
canvas隐藏问题
圆角矩形、圆角图片
多段文字
超长文字和多行文字缩略问题
矩形包含文字
多个元素间的层级问题
图片尺寸和渲染尺寸不一致问题
canvas转图片
IOS 6.6.7 clip问题
关于获取canvas实例
单位问题单位问题
canvas绘制使用的是px单位,但不同设备的px是需要换算的,所以在组件中统一使用rpx单位,这里就涉及到单位怎么换算问
题。
通过wx.getSystemInfoSync获取设备屏幕尺寸,从而得到比例,进而做转换,代码如下:
const sysInfo = wx.getSystemInfoSync();
const screenWidth = sysInfo.screenWidth;
this.factor = screenWidth / 750; // 获取比例
function toPx(rpx) { // rpx转px
return rpx * this.factor;
}
function toRpx(px) { // px转rpx
return px / this.factor;
canvas隐藏问题隐藏问题
在绘制海报过程时,我们不想让用户看到canvas,所以我们必须把canvas隐藏起来,一开始想到的是使用display:none; 但这
样在转化成图片时会空白,所以这个是行不通的,所以只能控制canvas的绝对定位,将其移出可视界面,代码如下: