1.0.67 • Published 5 months ago

zan-poster v1.0.67

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

概述

通过json直接在canvas上绘制图像, 基于 cax 画图框架开发, 改进优化自 json2canvas

🦖 小程序组件

小程序使用npm安装第三方包,详见 npm 支持

项目配置

zan-poster安装后大小41kb, 如果小程序主包超出2M,可采用分包异步化方案

  1. npm i zan-poster
  2. 微信开发者工具 -> 工具 -> 构建npm
  3. app.json配置中引入Component
{
  "usingComponents": {
    "zan-poster": "/miniprogram_npm/zan-poster/index"
  }
}

组件使用

方式一: props和事件

<zan-poster painting="{{painting}}" bind:change="onChange" />
Page({
  data: {
    painting: {}
  },
  ready() {
    // 设置画图数据
    this.setData({
      painting: {}
    })
  },
  methods: {
    onChange(array) {
      // 接收画图数据
      console.log(array)
      // [{ tempFilePath: 'xxx', errMsg: 'drawer:ok' }]
    }
  }
})

属性

名称类型默认值必填说明
paintingObject、Array{}画图数据, 以数组的形式传入多组画图数据实现多张海报绘制 (回调方式绘制与此一致)
showCanvasBooleanfalse是否显示画板
preloadBooleanfalse图片、字体预加载(注意:预加载完成后,开始启动画图需设置为false,否则画图将不会启动)
showLoadingBooleantrue是否显示画图loading进度状态,且无法穿透(H5不支持)
syncBooleantrue是否同步画图; false时为异步, 支持success回调函数和change事件接收单次绘制完成全量数据 (未绘制的图像值为空白base64格式图, promise风格只能接收全部绘制完成数据)

事件

名称类型必填返回类型说明
changeFunction{tempFilePath: string, errMsg: string}完成画图触发事件

方式二: 模板引用

组件对外提供draw回调方法画图

<zan-poster id="myPoster" />
Page({
  data: {
    // Object | Array
    painting: {}
  },
  ready() {
    const poster = this.selectComponent('#myPoster')

    // 1: 回调
    poster.draw({
      // 设置画图数据
      painting: this.data.painting,
      success(array) {
        // 接收画图数据
        console.log(array)
        // [{ tempFilePath: 'xxx', errMsg: 'drawer:ok' }]
      },
      fail() {}
    })

    // 2: 回调 (异步画图)
    poster.draw({
      // 设置画图数据
      painting: this.data.painting,
      // 异步画图设置
      sync: false,
      success(array) {
        // 接收单次绘制完成全量数据 (未绘制的图像值为空白base64格式图)
        // 如果是多图绘制,则回调函数会被执行多次,将每一次最新数据返回
        console.log(array)
        // [{ tempFilePath: 'xxx', errMsg: 'drawer:ok' }]
      },
      fail() {}
    })

    // 3: promise
    poster.draw({
      // 设置画图数据
      painting: this.data.painting
    }).then((array) => {
      // 接收画图数据
      console.log(array)
      // [{ tempFilePath: 'xxx', errMsg: 'drawer:ok' }]
    }).catch(console.log)
  }
})

🐮 web组件

web端组件采用浏览器原生web component开发,顾使用者浏览器需支持web component特性 (移动端完全支持)

通过npm或CDN引用

NPM

npm i zan-poster

CDN

使用

vue2

main.js中引入及配置

import Vue from 'vue'
import 'zan-poster/dist/zan-component/zan-component.esm'

Vue.config.ignoredElements = [/^zan-/]

vue3

main.js中引入及配置

import Vue from 'vue'
import 'zan-poster/dist/zan-component/zan-component.esm'

const app = Vue.createApp({ /* ... */ })
app.config.isCustomElement = tag => tag.startsWith('zan-')

web

<script
  type="module"
  src="https://cdn.jsdelivr.net/npm/zan-poster/dist/zan-component/zan-component.esm.js"
></script>

页面或模板中使用

组件props,参考小程序组件说明,web端尽量使用draw回调方法画图

<zan-poster></zan-poster>
// 画图数据
const painting = {}

async function createPoster() {
  await customElements.whenDefined('zan-poster')
  const ZanPoster = document.querySelector('zan-poster')

  ZanPoster.draw({
    painting
  }).then((array) => {
    // 接收画图数据
    console.log(array)
    // [{ tempFilePath: 'xxx', errMsg: 'drawer:ok' }]
  })
}
createPoster()

🦉 画图数据类型及属性参照表

Canvas(画布)

属性类型默认值必填说明
widthNumber画布宽度
heightNumber画布高度
xNumber0相对于画布左侧的距离
yNumber0相对于画布顶部的距离
fillStyleString背景色,十六进制,例:"#ffffff"
urlString背景图,支持本地和网络图片,注意https
childrenArray子元素数组
fontsArray字体列表, {family: string, source: string } family字体名(需要和使用中指定名称一致), source字体路径

容器 (container)

实现一列或多列排版,画板高度将根据容器高度自动改变;且容器children一级子元素只接受type=group类型,否则无效

属性类型默认值必填说明
typeStringcontainer类型
widthNumber{canvas.width}宽度,默认画布宽度
heightNumber、String'auto'高度,默认auto, 如果设置了值,高度则固定不变
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
childrenArray子元素数组 (一级子元素只接受type=group类型,且高度必填)

Group(组)

属性类型默认值必填说明
typeStringgroup绘制类型
widthNumber宽度
heightNumber高度
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
fillStyleString背景色,支持十六进制和RGB,例:"#ffffff",rgba(0,0,0,1)
urlString背景图,支持本地和网络图片,注意https
childrenArray子元素数组
displayStringrow、column、justify 设置平铺方式; justify将移除第一个元素(排除内容为空元素)x坐标值
alignStringleft、center、right 对齐方式,需设置display=row 且 width != 0

Text(文本)

属性类型默认值 / 示例必填说明
typeStringtext绘制类型
heightNumber如果文本为动态内容可设置为'auto'
uiHeightNumber如果是动态内容,可设置文本区域最大高度
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
textString文本内容
fontString'10px sans-serif'字体及大小,例:'24px 微软雅黑'
colorString'black'字体颜色
textAlignString'left''left','center','right'
baselineString'top''bottom','alphabetic','ideographic','top','hanging'
orientationString‘horizontal’文字方向,‘horizontal’ 或 ‘vertical’
maxWidthNumber最大宽度(设置后会自动换行,需要和lineHeight配合使用)
lineHeightNumber行高
maxLineNumber最大行数,超出则显示...
shadowObject{color,offsetY,offsetYblur}阴影
linearGradientObjectx1,y1,x2,y2渐变点起始坐标,同canvas createLinearGradient,超过4个值将改变为radialGradient
colorsArray[0,'#CCC',0.2,'#AAA',1,'#AAA']填充颜色,同canvas addColorStop
pinBoolean固定位置(如果你有元素放在了动态文本的下方,又不希望这个元素位置被更新,可以设置该属性为true)
filterStringcss滤镜
lineDecorationString'top', 'middle', 'bottom'; 划线显示位置,为空则不显示 (支持多行)
lineColorString跟随字体颜色颜色
lineSizeNumber2线条粗细
lineOffsetTopNumber0线条上下偏移量(正往下,负往上)
lineOffsetLeftNumber0线条左右偏移量(正往右,负往左)
lineLevelString'top''top', 'bottom' 线条置于文字顶或底层

Image(图片)

属性类型默认值 / 示例必填说明
typeStringimage绘制类型
widthNumber宽度
heightNumber、String高度、auto(设置'auto'时,maxHeight必填,实现高度自动,暂时仅支持第一级元素)
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
isCircularBooleanfalse圆,以短边为直径
maxHeightNumber实际最大高度实际可接受图片的最大高度(注意: IOS下最大高度4096/2px)
isCenterBooleanfalse以短边为准,居中
filterStringcss滤镜

Circle(圆)

属性类型默认值 / 示例必填说明
typeStringcircle绘制类型
widthNumber宽度
heightNumber高度
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
rNumber20半径
strokeStyleNumber边框颜色,例:'#FFFFFF'
rt,rb,lt,lbBooleantrue分别控制四个角是否圆角,上,右下,左上,左下
strokeStyleString边框颜色,例:'#FFFFFF'
lineWidthString1边框宽度
fillStyleString填充颜色,例:#FFFFFF
linearGradientString渐变点起始坐标 x1,y1,x2,y2,同createLinearGradient
colorsString填充颜色,例: [0,'#CCC',0.2,'#AAA',1,'#AAA'],同 addColorStop
filterStringcss滤镜

Rect(矩形)

属性类型默认值 / 示例必填说明
typeStringrect绘制类型
widthNumber宽度
heightNumber高度
xNumber0相对于父元素左侧的距离
yNumber0相对于父元素顶部的距离
rNumber20半径
strokeStyleNumber边框颜色,例:'#FFFFFF'
rt,rb,lt,lbBooleantrue分别控制四个角是否圆角,右上,右下,左上,左下
strokeStyleString边框颜色,例:'#FFFFFF'
lineWidthString1边框宽度
fillStyleString填充颜色,例:#FFFFFF
linearGradientString渐变点起始坐标 x1,y1,x2,y2,同createLinearGradient,例:0,0,100,0由左向右渐变,0,0,0,100由上向下渐变
colorsArray填充颜色,也可理解为颜色节点,例:[0,'#CCC',0.2,'#AAA',1,'#AAA'],同 addColorStop
filterStringcss滤镜

🦨 画图数据示例

系统字体参考: https://segmentfault.com/a/1190000011827800

{
  "width": 750,
  "height": 1370,
  "fillStyle": "#FFFFFF",
  "children": [
    {
      "type": "group",
      "width": 600,
      "height": 460,
      "x": 0,
      "y": 0,
      "children": [
        {
          "type": "text",
          "text": "内容",
          "maxWidth": 580,
          "lineHeight": 40,
          "textAlign": "right",
          "font": "30px BlinkMacSystemFont",
          "color": "#333333",
          "height": "auto",
          "uiHeight": 200,
          "x": 30,
          "y": 30
        },
        {
          "type": "image",
          "width": 100,
          "height": 200,
          "x": 30,
          "y": 260,
          "url": "https://image.jbzyun.cn/9538/2024/material/image/0ed8ce48e3b24ab5a18f4e36ea69af00.png",
          "isCircular": true,
          "r": 10
        }
      ]
    }
  ]
}

😇 说明

此版本只提供画图能力, 交互及动画都已去除

  • 升级小程序canvas API
  • 图片、字体预加载
  • 增加自定义字体
  • 自适应高度
  • 横竖平铺排版
  • 容器内单列、多列排版
  • 修复了图片容器若干问题
  • 集成阿里和七牛裁图能力
  • 文字划线(支持多行)
  • 容器垂直排版
  • 图片默认webp格式
1.0.67

5 months ago

1.0.66

5 months ago

1.0.65

5 months ago

1.0.64-alpha.6

7 months ago

1.0.64-alpha.1

8 months ago

1.0.64-alpha.2

8 months ago

1.0.62

9 months ago

1.0.61

9 months ago

1.0.63

8 months ago

1.0.61-alpha.1

9 months ago

1.0.63-alpha.0

9 months ago

1.0.63-alpha.3

8 months ago

1.0.63-alpha.1

9 months ago

1.0.63-alpha.2

8 months ago

1.0.62-alpha.0

9 months ago

1.0.60

10 months ago

1.0.59-alpha.0

10 months ago

1.0.60-alpha.0

10 months ago

1.0.59

10 months ago

1.0.58-alpha.4

10 months ago

1.0.58-alpha.5

10 months ago

1.0.58

10 months ago

1.0.57

11 months ago

1.0.56

11 months ago

1.0.55-alpha.4

11 months ago

1.0.55

11 months ago

1.0.55-alpha.3

11 months ago

1.0.55-alpha.2

1 year ago

1.0.54

1 year ago

1.0.54-alpha.11

1 year ago

1.0.54-alpha.10

1 year ago

1.0.54-alpha.2

1 year ago

1.0.53-alpha.22

1 year ago

1.0.53-alpha.21

1 year ago

1.0.53-alpha.20

1 year ago

1.0.53-alpha.19

1 year ago

1.0.53-alpha.16

1 year ago

1.0.53-alpha.13

1 year ago

1.0.53

1 year ago

1.0.53-alpha.11

1 year ago

1.0.53-alpha.3

1 year ago

1.0.53-alpha.1

1 year ago

1.0.53-alpha.0

1 year ago

1.0.53-alpha.5

1 year ago

1.0.49

1 year ago

1.0.53-alpha.10

1 year ago

1.0.51

1 year ago

1.0.50

1 year ago

1.0.52

1 year ago

1.0.48

1 year ago

1.0.47

1 year ago

1.0.46

1 year ago

1.0.45

1 year ago

1.0.39

1 year ago

1.0.40

1 year ago

1.0.44

1 year ago

1.0.43

1 year ago

1.0.42

1 year ago

1.0.41

1 year ago

1.0.38

1 year ago

1.0.37

1 year ago

1.0.36

1 year ago

1.0.35

1 year ago

1.0.20

1 year ago

1.0.25

1 year ago

1.0.24

1 year ago

1.0.29

1 year ago

1.0.27

1 year ago

1.0.33

1 year ago

1.0.32

1 year ago

1.0.31

1 year ago

1.0.30

1 year ago

1.0.34

1 year ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.9

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.2

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.1

1 year ago