前言
最近在用uniapp开发小程序,需要用到canvas画海报然后再保存本地。
之前写过同样功能的文章,不过场景不同,之前是在web上生成海报,该场景可以使用之前文章的方法——html转canvas来实现。
但是uniapp则不同,该框架是去DOM化的,因此只能使用uniapp的官方canvas来实现。
功能拆解
网上找到的文章,有几篇写得挺好的,展现了完整的功能。这里我把用到的几个功能拆解出来,而不用先通读整篇代码。
创建canvas
|
|
背景色
|
|
加载图片
1)本地图片
图片直接在项目中,可以直接加载。
|
|
2)url
此处url返回的为文件流,在uniapp中无法直接加载,需要转换成本地信息才可以使用。
有两种方式可以使用,小程序都需要添加download合法域名:
- uni.getImageInfo:获取文件信息,我使用的这个方法
- uni.downloadFile:下载文件
原生使用方法是这样的:
|
|
由于js的异步问题,如果图片较大或者多个图片的情况下,会有这边还没加载完,canvas就已经绘制完了的情况,所以这里将其优化下。
|
|
3)base64
如果你的图片数据是base64的,那恭喜你,依然加载不了。当然这存在的情况是,微信开发工具是没有问题的,但是上了真机之后直接无法加载了,这波是小程序的锅。
这里呢需要将图片存储然后用本地地址绘制。
原生方法:
|
|
优化一波:
|
|
文字
|
|
圆角矩形
想要绘制一个圆角的矩形,啊……这波就复杂了,原理就不细讲了,直接上代码,调用即可。
|
|
图片加载为圆形
基本原理是,正常加载图片,canvas画个圆给它裁剪掉,上代码!
|
|
canvas生成的海报下载
|
|
问题
图片有时显示有时不显示
|
|
base64数据的图片在小程序开发工具显示,到了真机就不显示了
|
|
canvas整体画成圆角的
|
|