0.0.4 • Published 4 years ago

@retailwe/ui-canvas-poster v0.0.4

Weekly downloads
2
License
-
Repository
-
Last release
4 years ago

canvas-poster 海报分享组件

canvas-poster是一个生成二维码海报的组件,通过非常简单的配置就可以生成精美的海报

1 引入

全局引入,在miniprogram根目录下的app.json中配置,局部引入,在需要引入的页面或组件的index.json中配置。

// app.json 或 index.json
"usingComponents": {
  "wr-canvas-poster": "@retailwe/ui-canvas-poster/index"
}

2 代码演示

2.1 基础用法

  <wr-canvas-poster id="wr-canvas-poster" width="750" height="800"></wr-canvas-poster>
import { DEFAULT_CONFIG } from './type';

Page({
  posterContext: null,

  handleGeneratePoster() {
    (this.getPosterContext() as any).showPoster(DEFAULT_CONFIG).then(res => {
      console.log('生成海报返回的临时路径', res);
    });
  },

  // 获取canvas-poster组件实例
  getPosterContext() {
    if (!this.posterContext) {
      (this.posterContext as any) = this.selectComponent('#wr-canvas-poster');
    }
    return this.posterContext;
  },
});

3 API说明

3.1 Props

参数说明类型默认值版本
id用于父组件获取本组件实例,获取实例调用方法详见3.2String--
width海报的宽度,单位rpxNumber750-
height海报的高度,单位rpxNumber1000-
qualitycanvas海报生成的图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理Number1-
fileTypecanvas海报生成的图片的类型String'jpg'-

3.2 实例可调用方法

API说明参数参数默认值返回值
showPoster显示canvas画布,生成海报,返回生成图片的临时路径ViewItem[]-Promise
hidePoster隐藏canvas画布---

showPoster用法如下,其中,DEFAULT_CONFIG是类型为ViewItem[]的海报配置信息,3.3将重点讲解。该函数返回promise回调,可以通过then方法获取canvas海报生成的图片的临时路径,用于保存到本地。

    (this.getPosterContext() as any).showPoster(DEFAULT_CONFIG).then(res => {
      console.log('生成海报返回的临时路径', res);
    });

3.3 海报配置信息

海报配置信息的格式为ViewItem[],其中,ViewItem的定义如下:

type ViewItem =
  | {
      type: EnumViewType.LINE;
      start: Point;
      end: Point;
      css: LineStyle;
    }
  | {
      type: EnumViewType.VIEW;
      css: ViewStyle;
    }
  | {
      type: EnumViewType.IMAGE;
      url: string;
      css: ImageStyle;
    }
  | {
      type: EnumViewType.TEXT;
      text: string;
      css: TextStyle;
    }
  | {
      type: EnumViewType.QRCODE;
      content: string;
      css: QRcodeStyle;
    };

enum EnumViewType {
  LINE = 'line',
  VIEW = 'view',
  IMAGE = 'image',
  TEXT = 'text',
  QRCODE = 'qrcode',
}

下面将详细解释每种类别可传入的配置信息

3.3.1 Line 配置

字段类型必填描述
typeEnumViewType.LINE类别
startPoint起点坐标
endPoint终点坐标
cssLineStyle线的样式
  • Point类型:
字段类型必填描述
leftstring / number距离左边的坐标
topstring / number距离顶部的坐标
  • LineStyle类型:
字段类型必填描述默认值 |
widthstring / number线的宽度1px
colorstring / function线的颜色,可渐变'#000'
shadowstring阴影,参考css阴影的样式编辑-

其中,线性渐变的颜色可用函数传入,传入的格式为:

(
  ctx: WechatMiniprogram.CanvasContext,
  start: Point,
  end: Point,
  width: number,
) => WechatMiniprogram.CanvasGradient;

3.3.2 View 配置

字段类型必填描述
typeEnumViewType.VIEW类别
cssViewStyle样式
  • ViewStyle类型:
字段类型必填描述默认值 |
widthstring / number宽度-
heightstring / number高度-
leftstring / numberleft坐标-
topstring / numbertop坐标-
borderRaidusstring / number圆角-
borderWidthstring / number边框宽度-
borderColorstring / number边框颜色-
background见下方背景-
shadowstring阴影-
rotatenumber顺时针旋转角度,以弧度计。 请使用 degrees*Math.PI/180 公式进行计算-

其中,background字段的类型如下所示:

type Background =
  | number
  | string
  | GetBackgroundGradient
  | WechatMiniprogram.CanvasGradient;

3.3.3 Image 配置

字段类型必填描述
typeEnumViewType.IMAGE类别
urlstring图片的链接
cssImageStyle样式
  • ImageStyle类型:
字段类型必填描述默认值 |
leftstring / numberleft坐标-
topstring / numbertop坐标-
widthstring / number宽度原始图片宽度
heightstring / number高度原始图片高度
borderRaidusstring / number圆角-
shadowstring阴影-
rotatenumber顺时针旋转角度,以弧度计。 请使用 degrees*Math.PI/180 公式进行计算-

3.3.4 Text 配置

字段类型必填描述
typeEnumViewType.TEXT类别
textstring文本内容
cssTextStyle样式
positionIdstring用于文本定位,与relativePositionId配合使用
relativePositionIdstring用于文本定位,基于前一个postionId相同的文本右下角进行定位
  • TextStyle类型:
字段类型必填描述默认值 |
leftstring / numberleft坐标-
topstring / numbertop坐标-
widthstring / number宽度AUTO
heightstring / number高度AUTO
paddingstring / number内边距0
borderRaidusstring / number圆角0
borderWidthstring / number边框宽度0
borderColorstring / number边框颜色-
background见下方背景-
fontSizestring / number文字大小18
fontWeightstring / number文字权重'normal'
fontStylestring文字样式'normal'
fontFamilystring文字字体'sans-serif'
textDecorationstring文字修饰-
textAlignstring文本水平对齐方式'left'
verticalAlignstring文本垂直对齐方式'top'
colorstring文字颜色'#000'
lineHeightstring文字行高'1.4em'
lineClampnumber指定行数省略-
shadowstring阴影-
rotatenumber顺时针旋转角度,以弧度计。 请使用 degrees*Math.PI/180 公式进行计算-

其中,background字段的类型如下所示:

type Background =
  | number
  | string
  | GetBackgroundGradient
  | WechatMiniprogram.CanvasGradient;
  • 新功能

为满足同一行字体大小不一致的情况,比如价格标签,新功能支持基于前一个文本右下角进行定位。

使用方法参考如下:

// 自定义的id
const PRICE = 'price';

// 配置如下:
  {
    type: 'text',
    text: '98.',
    positionId: PRICE, // 定义一个positionId
    css: {
      left: '32rpx',
      top: '644rpx',
      fontSize: '28rpx',
      color: '#ff0000',
      fontWeight: 600,
      lineHeight: '28rpx',
    },
  },
  {
    type: 'text',
    text: '00',
    relativePositionId: PRICE,  // 相对前一个 positionId 为 PRICE 的文本右下脚进行定位
    css: {
      left: 0,
      top: '-20rpx',
      fontSize: '20rpx',
      color: '#ff0000',
      fontWeight: 600,
      lineHeight: '20rpx',
    },
  },

3.3.5 QRcode 配置

字段类型必填描述
typeEnumViewType.TEXT类别
contentstring文本内容
cssQRcodeStyle样式
  • QRcodeStyle类型
字段类型必填描述默认值 |
leftstring / numberleft坐标-
topstring / numbertop坐标-
widthstring / number宽度-
heightstring / number高度-
colorstring文字颜色-
background见下方背景-
shadowstring阴影-
rotatenumber顺时针旋转角度,以弧度计。 请使用 degrees*Math.PI/180 公式进行计算-

其中,background字段的类型如下所示:

type Background =
  | number
  | string
  | GetBackgroundGradient
  | WechatMiniprogram.CanvasGradient;
0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago