评论

安利一个小程序生成图片的插件-Painter

小程序生成图片库,轻松通过 json 方式绘制一张可以发到朋友圈的图片

我们可能会经常遇到小程序分享海报的绘制需求,海报绘制无非就是将元素在 canvas 上绘制并生成图片,常用的方法有 Wxml2Canvas 及 Painter。由于 Wxml2Canvas 的局限性较大,而且绘制出来的效果比较一般,如果较为简单的海报可以尝试使用,本文着重分享一下 Painter 以及使用方法。

安利一款插件:Painter https://github.com/Kujiale-Mobile/Painter

Painter 的原理相当于我们把需要出现在画板的元素列出来传给 Painter,它就会调用 Pen 去将元素一一绘制出来。Painter 支持绘制的格式有 text(文本)、image(图片)、rect(矩形)、qrcode(二维码)。并且 Painter 的强大在于它不仅可支持圆角、阴影、边框、渐变色的绘制,还可支持旋转(rotate)、分辨率调整,功能十分强大,可满足业务中的大部分需求。

Painter 中的元素基本都是以绝对定位形式存在的,但也可支持相对定位,操作起来也不麻烦,只需要给相对元素设置一个 id,后续元素即可根据该元素进行相对偏移。至于元素的层级关系,由于 Painter 中没有 z-index 用于控制层级,所以采用的方式是出现在后面的元素则层级较高。 

下面给一个 demo:

"usingComponents":{
  "painter":"/components/painter/painter"
}

<painter palette="{{data}}" bind:imgOK="onImgOK" />

const data = {
  background: '#000000',
  width: "500rpx",
  height: "800rpx",
  views: [
    // background image
    {
      type: 'image',
      url: 'https://cloud-minapp-37887.cloud.ifanrusercontent.com/1lJ5j1YODUdcYLH3.jpg',
      css: {
        width: '100%',
        height: '100%',
        top: '0',
      },
    },
    {
      type: 'rect',
      css: {
        width: '394.3rpx',
        height: '302.3rpx',
        top: '196rpx',
        left: '76rpx',
        rotate: '7',
        color: '#FFFFFF',
        shadow: '0px 10px 15px rgba(119, 7, 9, 0.25)',
      },
    },
    {
      type: 'image',
      url: "",
      css: {
        width: '371.78rpx',
        height: '279.76rpx',
        top: '207.44rpx',
        left: '87.44rpx',
        rotate: '7',
        mode: 'scaleToFit',
      },
    },
    {
      type: 'image',
      url: "",
      css: {
        width: '76rpx',
        height: '76rpx',
        borderRadius: '100%',
        top: '542rpx',
        left: '104rpx',
      },
    },
    {
      type: 'text',
      text: "",
      css: {
        top: '554rpx',
        left: '196rpx',
        color: '#606060',
        fontSize: '21rpx',
        lineHeight: '30rpx',
        fontWieght: 'bold',
      },
    },
    // tips
    {
      type: 'text',
      text: '识别二维码进入活动',
      css: {
        top: '796rpx',
        left: '104rpx',
        fontSize: '18rpx',
        lineHeight: '30rpx',
        maxLines: '2',
        color: '#606060',
      },
    },
    // 分享二维码
    {
      type: 'image',
      url: "",
      css: {
        width: '124rpx',
        height: '124rpx',
        right: '22rpx',
        bottom: '32rpx',
        borderRadius: '100%',
        borderWidth: '4rpx',
        borderColor: '#FFFFFF',
      },
    },
  ]
}

config 的配置,根据设计稿来完成就行。绘制完成后拿到临时存储路径,用个 image 标签将图片展示即可,图片保存参考微信官方文档 wx.saveImageToPhotosAlbum

最后一次编辑于  2024-01-19  
点赞 0
收藏
评论

1 个评论

  • taeyang
    taeyang
    2024-07-31

    想请问下,如果第一段文字长度不固定,而需要根据它绘制的情况才能决定第二段文字的top。可以怎么解决呢?


    2024-07-31
    赞同
    回复
登录 后发表内容