2.2.0 • Published 8 days ago

@sunkey/wx-canvas v2.2.0

Weekly downloads
-
License
ISC
Repository
-
Last release
8 days ago

这是什么?

小程序中的canvas操作封装,使其更易用,目前支持wx原生Taro

适用场景:

  • 绘制海报图片(支持引用远程图片)
  • 实时更新海报内容
  • 导出、下载
  • 支持Offscreen Canvas

不适合:

  • 动画
  • 复杂的需求

TODO

  • cantas.contextType 似乎只支持 '2d' ? 'webgl' 会报错

如何使用

npm i wx-canvas

Taro示例:获取canvas dom对象,并在其上绘制 一张远程图片 和 一段文字

function Poster(){
  
  // useReady 需要等到components ready 才能获取到 DOM
  useReady(async ()=>{
    // 如果是Taro环境,传入Taro对象,否则默认使用 wx
    // baseSize对应你设置的 <canvas> style.width,后续draw时传入的数值此为基准自动转换
    const $c = new WxCanvas({ Taro: Taro, baseSize : 500 })
    await $c.init({ id : 'poster', width: 2000, height : 1000 })
    // Offscreen Canvas
    // await $c.init({ compInst: this<the component to attach>,  width: 2000, height : 1000 })
    // 画一张图
    $c.drawImage(
      'https://tse3-mm.cn.bing.net/th/id/OIP-C.gRcZ-sVZdY741hyDj9ZpgwAAAA?pid=ImgDet&rs=1',
      // ImageParams
      { x:250, y:250, w:250, h:250 }
    )
    // 画一段文字,超出 lineNum x width 区域的会省略
    $c.drawText('弄范德萨发大撒范德萨发大水范德萨发大水范德萨',
      // TextParams
      { x:0, width:200, y:0, lineNum: 4, fontSize:40, lineHeight: 100, baseLine:'bottom' }
    )
    // 清空画布
    setTimeout(()=> $c.clear(), 3000 )
  })

  // canvasId & id 必须相同
  return <Canvas
    canvasId='poster'
    id='poster'
    type="2d"
    style={{ width: '500rpx', height: '500rpx' }}/>
}

References

async init():void

获取DOM并初始化,需在实例化后调用并等待完成才能开始draw

const $c = new WxCanvas('id')
await $wxCanvas.init()

drawText( String text, TextParams params = {} ):void

绘制文本

TextParams

字段名类型必填描述
xNumber(单位:rpx)坐标
yNumber(单位:rpx)坐标
fontSizeNumber(单位:rpx)文字大小
colorString颜色
opacityInt1为不透明,0为透明
lineHeightNumber(单位:rpx)行高
lineNumInt根据宽度换行,最多的行数
widthNumber(单位:rpx)没有指定为画布宽度
marginLeftNumber(单位:rpx)当text字段为Object可以使用,用来控制多行文字间距
marginRightNumber(单位:rpx)当text字段为Object可以使用,用来控制多行文字间距
textDecorationString目前只支持 line-through(贯穿线),默认为none
baseLineStringtop| middle|bottom基线对齐方式
textAlignStringleft|center|right对齐方式
zIndexInt层级,越大越高
fontFamilyString小程序默认字体为'sans-serif', 请输入小程序支持的字体,例如:'STSong'
fontWeightString'bold'加粗字体,目前小程序不支持 100 - 900 加粗
fontStyleString'italic'倾斜字体

drawImage( String url, ImageParams params = {} ):void

绘制图片

ImageParams

字段类型必填描述
xNumber右上角的坐标
yNumber右上角的坐标
wNumber宽度
hNumber高度
modeString填充模式,默认为 'cover'
borderRadiusNumber圆角,跟css一样
borderWidthNumber边框宽度
borderColorString边框颜色
zIndexInt层级,越大越高

drawBlock( BlockParams params = {} ):void

绘制方块

BlockParams

字段名类型必填描述
xNumber(单位:rpx)块的坐标
yNumber(单位:rpx)块的坐标
widthNumber(单位:rpx)如果内部有文字,由文字宽度和内边距决定
heightNumber(单位:rpx)
paddingLeftNumber(单位:rpx)内左边距
paddingRightNumber(单位:rpx)内右边距
borderWidthNumber(单位:rpx)边框宽度
borderColorString边框颜色
backgroundColorString背景颜色
borderRadiusNumber(单位:rpx)圆角
textObject块里面可以填充文字,参考texts字段解释
zIndexInt层级,越大越高

drawLine( LineParams params = {} ):void

绘制直线

LineParams

字段类型必填描述
startXNumber(单位:rpx)起始坐标
startYNumber(单位:rpx)起始坐标
endXNumber(单位:rpx)终结坐标
endYNumber(单位:rpx)终结坐标
widthNumber(单位:rpx)线的宽度
colorString线的颜色
zIndexInt层级,越大越高

Credit

Forked from taro-canvas

2.2.0

8 days ago

2.1.1

10 days ago

2.1.0

9 months ago

2.0.1

9 months ago

2.0.0

9 months ago

1.2.1

9 months ago

1.2.0

9 months ago

1.1.0

9 months ago

1.0.0

9 months ago