美文网首页
解锁微信小程序绘图新姿势:小程序简单绘图,通过 json 方式绘

解锁微信小程序绘图新姿势:小程序简单绘图,通过 json 方式绘

作者: AfanSama | 来源:发表于2018-08-08 10:09 被阅读0次

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

<details><summary>painting(点击展开)</summary>

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
        }
      ]
    }

</details>

API

<details><summary>对象结构一览</summary>

{
  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
    }
  ]
}

</details>

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

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

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

image(图片)

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

text(文本)

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

<img src="https://user-gold-cdn.xitu.io/2018/8/8/1651749935cebb2b" width=150 height=150 />

TIPS

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

相关文章

网友评论

      本文标题:解锁微信小程序绘图新姿势:小程序简单绘图,通过 json 方式绘

      本文链接:https://www.haomeiwen.com/subject/etjtbftx.html