手机版

小程序生成图片库

时间:2021-12-08 来源:互联网 编辑:宝哥软件园 浏览:

Painter

小程序生成图片库(图1)

因为我们无法将小程序直接分享到朋友圈,但是目前分享到朋友圈的需求很多,行业目前的做法是利用小程序的Canvas功能生成一张带有二维码的图片,然后引导用户在本地下载后分享到朋友圈。小程序的Canvas功能很难使用,往往需要写一堆样板代码才能画出简单的画面。这个时候,如果一个小程序包含多个画图要求,那绝壁就会疯狂。另外,画布上还有很多画坑,绝对会让你抓狂。

这里有几个小程序画布坑:

1、Canvas绘图是用px完成的,而在小程序中我们一般使用rpx进行相对布局。

2.applet的drawCanvas方法可以直接在IDE中设置网络图片进行绘制,但是在真机上设置网络图片是没有用的。

3.iOS设备上微信6.6.6及以下版本的canvasContext.clip方法存在bug,会导致此剪辑下使用的还原方法失败。画家的计划

我觉得小程序生成图片的要求那么多,Canvas生成方法那么难,那么别扭。然后我们考虑是否可以建立一个可以轻松生成图片的库,同时也屏蔽那些直接使用Canvas的坑。因此,我们推出了“画师项目——通过json数据表单动态渲染并绘制图片”。画家图书馆的整体架构如下:

小程序生成图片库(图2)

首先,我们定义一套绘图JSON规范。开发人员可以构建一个调色板,根据自己的需求生成图片,然后在程序运行过程中将调色板传递给Painter。画师会调用Pen,根据Palette内容绘制相应的图片,然后返回。如何使用

运行例子

因为这个项目是子模块管理模式。首次克隆克隆时,需要添加- recursive参数。

git clone https://github.com/Kujiale-Mobile/Painter.git-Recursive代码下载后用小程序IDE打开即可使用。使用画师

介绍代码

可以在主项目下执行以下命令,通过子模块引入画师组件。建议在组件目录中。

git子模块a

dd https://github.com/Kujiale-Mobile/PainterCore.git painter
  • 作为自定义组件引入,注意目录为第一步引入的代码所在目录

    "usingComponents":{  "painter":"/components/painter/painter"}
  • 组件接收palette字段作为画图数据的数据源, 图案数据以json形式存在,推荐使用“皮肤模板”的方法进行传递,示例代码如下:

  • 数据传入后,则会自动进行绘图。绘图完成后,你可以通过绑定 imgOK 或 onImgErr 事件来获得成功后的图片 或失败的原因。

    bind:imgOK="onImgOK"bind:imgErr="onImgErr"Palette 规范
  • 如你使用 wxss + wxml 规范进行绘制一样,Painter 需要根据一定的规范来进行图片绘制。当然 Painter 的绘制规范要比 wxml 简单很多。调色板属性

    一个调色板首先需要给予一些整体属性

    background: 可以是颜色值,也可以为网络图片的链接,默认为白色width: 宽度height: 高度borderRadius: 边框的圆角(该属性也同样适用于子 view)views: 里面承载子 view子 View 属性

    当我们把整体的调色板属性构建起来后,里面就可以添加子 View 来进行绘制了。

    typecontentdescription自有cssimageurl表示图片资源的地址,本地或网络texttext文本的内容fontSize: 文字大小,color: 字体颜色(默认为黑色)rect无矩形color: 颜色qrcodecontent画二维码background: 背景颜色(默认为透明色),

    布局属性

    以上 View ,除去自己拥有的特别属性外,还有以下的通用布局属性

    属性意义rotate旋转,按照顺时针旋转的度数,默认不旋转borderRadius边界圆角程度,如果是正方形布局,该属性为一半宽或高时,则为圆形top、right、bottom、left如 css 中为 absolute 布局时的作用,默认 top 和 left 为 0

    尺寸即其他

    1,目前 Painter 中支持两种尺寸单位,px 和 rpx,代表的意思和小程序中一致,此处就不多说。

    2,目前子 view 的 css 属性支持 object 或 array。所以意味着,你可以把几个子 view 共用的 css 属性提取出来。做到让 Palette 更加简洁。

    3,因为我们的 palette 是以 js 承载的 json,所以意味着你可以在每一个属性中很方便的加上自己的逻辑。也可以把某些属性单独提取出来,让多个 palette 共用,做到模块化。举个栗子

    {  background: '#eee',  width: '654rpx',  height: '400rpx',  borderRadius: '20rpx',  views: [  {    type: 'image',    url: 'https://qhyxpicoss.kujiale.com/r/2017/12/04/L3D123I45VHNYULVSAEYCV3P3X6888_3200x2400.jpg@!70q',    css: {      top: '48rpx',      right: '48rpx',      width: '192rpx',      height: '192rpx',    },  }  ],}

    绘制效果如下

    小程序生成图片库(图3)

    版权声明:小程序生成图片库是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。