解锁微信小程序绘图新姿势:小程序简单绘图,通过 json 方式绘制一张朋友圈分享图...

esay-canvas

新增 esay-canvas。之后同步更新。

做微信小程序中最好用的 canvas 绘图组件之一。

当前环境下,大家都非常需要分享到朋友圈这个功能,但是实现起来各有心酸(坑比较多),所以才有了如下的 canvas 绘图工具。

具有如下特性:

  • 简单易用 —— 一个 json 搞定绘制图片
  • 功能全 —— 满足 90% 的使用场景
    • 绘制文本(换行、超出内容省略号、中划线、下划线、文本加粗)
    • 绘制图片
    • 绘制矩形
    • 保存图片
    • 多图绘制
    • 圆形图片
    • 绘制圆角矩形
    • ...
  • 代码量小

体验

git clone https://github.com/AfanSama/esay-canvas
复制代码

想在手机上使用配置自己的 appid 即可。

编译模式中已经为你配置好比较常用的两种模式:

  • 普通绘制,绘制单张分享图。
  • 多图绘制,连续绘制分享图

使用

  • git clone https://github.com/AfanSama/esay-canvas 到本地

  • components 中的 esay-canvas 拷贝到自己项目下。

  • 在使用页面注册组件

    {
      "usingComponents": {
        "esay-canva": "/components/esay-canva/esay-canva"
      }
    }
    复制代码
  • 在页面 **.wxml 文件中加入如下代码

    <esay-canvas painting="{{painting}}" bind:getImage="eventGetImage"/>
    复制代码

    painting 是需要传入的 jsongetImage 方法是绘图完成之后的回调函数,在 event.detail 中返回绘制完成的图片地址。

  • 当前栗子中的 painting 简单展示一下。详细配置请看 API

    painting(点击展开)
    painting: {
          width: 375,
          height: 555,
          clear: true,
          views: [{
              type: 'image',
              url: '/images/background.jpg',
              top: 0,
              left: 0,
              width: 375,
              height: 555
            },
            {
              type: 'roundrect',
              background: "#fff",
              top: 57.5,
              left: 88,
              width: 280,
              height: 25,
              radius:10
            },
            {
              type: 'image',
              url: 'https://wx.qlogo.cn/mmhead/Q3auHgzwzM7v6mLlMiblTaIBuq8VYHVBj61wC69r1jfz4wvjicSsMnKg/0',
              top: 27.5,
              left: 29,
              width: 55,
              height: 55,
              borderRadius: true
            },
            {
              type: 'text',
              content: '您的好友【Afan】',
              fontSize: 16,
              color: '#fff',
              textAlign: 'left',
              top: 33,
              left: 96,
              bolder: true
            },
            {
              type: 'text',
              content: '发现一件好货,邀请你一起0元免费拿!',
              fontSize: 15,
              color: '#563D20',
              textAlign: 'left',
              top: 59.5,
              left: 96
            },
            {
              type: 'image',
              url: '/images/pic.jpg',
              top: 136,
              left: 42.5,
              width: 290,
              height: 186
            },
            {
              type: 'image',
              url: '/images/qrcode.jpg',
              top: 470,
              left: 85,
              width: 68,
              height: 68,
              borderRadius: true
            },
            {
              type: 'text',
              content: '正品MAC魅可口红礼盒生日唇膏小辣椒Chili西柚情人',
              fontSize: 16,
              lineHeight: 21,
              color: '#fff',
              textAlign: 'left',
              top: 336,
              left: 44,
              width: 287,
              MaxLineNumber: 2,
              breakWord: true,
              bolder: true
            },
            {
              type: 'text',
              content: '¥0.00',
              fontSize: 19,
              color: '#E62004',
              textAlign: 'left',
              top: 387,
              left: 44.5,
              bolder: true
            },
            {
              type: 'text',
              content: '原价:¥138.00',
              fontSize: 13,
              color: '#7E7E8B',
              textAlign: 'left',
              top: 391,
              left: 110,
              textDecoration: 'line-through'
            },
            {
              type: 'text',
              content: '长按识别图中二维码帮我砍个价呗~',
              fontSize: 14,
              color: '#383549',
              textAlign: 'left',
              top: 483,
              left: 165.5,
              lineHeight: 20,
              MaxLineNumber: 2,
              breakWord: true,
              width: 125
            }
          ]
        }
    复制代码

API

对象结构一览
{
  width: 375,
  height: 555,
  views: [
    {
      type: 'image',
      url: 'url',
      top: 0,
      left: 0,
      width: 375,
      height: 555,
      borderRadius: true
    },
    {
      type: 'text',
      content: 'content',
      fontSize: 16,
      color: '#402D16',
      textAlign: 'left',
      top: 33,
      left: 96,
      bolder: true
    },
    {
      type: 'rect',
      background: 'color',
      top: 0,
      left: 0,
      width: 375,
      height: 555
    },
    {
      type: 'roundrect',
      background: "#fff",
      y: 57.5,
      x: 88,
      width: 280,
      height: 25,
      radius:10
    }
  ]
}
复制代码

数据对象的第一层需要三个参数: widthheightmodeviews。配置中所有的数字都是没有单位的。这就意味着 canvas 绘制的是一个比例图。具体显示的大小直接把返回的图片路径放置到 image 标签中即可。

mode 可选值有 same, 默认值为空,常规下尽量不要使用。如要使用请看 Q&A的第1点。

当前可以绘制3种类型的配置: imagetextrectroundrect。配置的属性基本上使用的都是 css 的驼峰名称,还是比较好理解的。

image(图片)

属性含义默认值可选值
url绘制的图片地址,可以是本地图片,如:/images/1.jpeg
top左上角距离画板顶部的距离
left左上角距离画板左侧的距离
width要画多宽0
height要画多高0
borderRadius是否圆形0true

text(文本)

属性含义默认值可选值
content绘制文本''(空字符串)
color颜色black
fontSize字体大小16
textAlign文字对齐方式leftcenter、right
lineHeight行高,只有在多行文本中才有用20
top文本左上角距离画板顶部的距离0
left文本左上角距离画板左侧的距离0
breakWord是否需要换行falsetrue
MaxLineNumber最大行数,只有设置 breakWord: true ,当前属性才有效,超出行数内容的显示为...2
widthMaxLineNumber 属性配套使用,width 就是达到换行的宽度
bolder是否加粗falsetrue
textDecoration显示中划线、下划线效果noneunderline(下划线)、line-through(中划线)

rect (矩形,线条)

属性含义默认值可选值
background背景颜色black
top左上角距离画板顶部的距离
left左上角距离画板左侧的距离
width要画多宽0
height要画多高0

roundrect(圆角矩形)

属性含义默认值可选值
background背景颜色black
top左上角距离画板顶部的距离
left左上角距离画板左侧的距离
width要画多宽0
height要画多高0
radius圆角度数0

Q&A

  1. 最佳实践

    绘制操作的时候最好 锁住屏幕 ,例如在点击绘制的时候

    wx.showLoading({
      title: '绘制分享图片中',
      mask: true
    })
    复制代码

    绘制完成之后

    wx.hideLoading()
    复制代码

他们都在用 esay-canvas

TIPS

如果有什么疑问,欢迎 issues。 如果觉得不错,能不能送我小 ✨ ✨ ,让我有更多的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值