New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

wxml2canvas

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

wxml2canvas

将wxml指定节点转换成canvas元素

latest
npmnpm
Version
1.0.1
Version published
Maintainers
1
Created
Source

v1.3.0

优化图片清晰度控制。

new Wxml2Canvas时增加destZoom属性,默认3,(建议取值范围2-5),取消destWidthdestHeight属性的作用。destZoom值越大,图片越大,建议不传,使用小程序默认值。

v1.2.0

支持base64图片的转换和绘制,基于sdk1.9.9+,将图片存储到本地再绘制。 使用时src或background-image传入base64编码的值,然后声明data-base64="1"。下图绿框部分为base64图片:

base64图片

v1.1.0

支持图片的缩放和裁剪,使用时声明如:data-mode="aspectFill",mode的13种模式完全支持。效果如下:

图片裁剪和缩放

注意:目前开发者工具图片裁剪显示有bug,以真机效果为准。

Wml2Canvas 介绍

特性

  • 配置数据绘制基础图形、文字
  • wxml元素转换成canvas元素

示例

直接在小程序开发工具里运行项目,可看到两种使用方式。真机预览时,建议填入有权限的appid,然后打开调试,否则无法看到网络图片。

使用方式

安装:

    npm install wxml2canvas

wxml:

<view class="share__canvas share__canvas1">
    <view class="share__canvas1-text draw_canvas" 
        data-type="text" data-text="这是一段无边距文字">
        这是一段无边距文字
    </view>
</view>
<canvas canvas-id="canvas1" class="share__canvas"></canvas>

js:

import Wxml2Canvas from 'wxml2canvas'; // 根据具体路径修改,node_modules会被忽略
Page({
    drawImage1 () {
        let self = this;
        this.drawImage1 = new Wxml2Canvas({
            width: 340, // 宽, 以iphone6为基准,传具体数值,其他机型自动适配
            height: 210, // 高
            element: 'canvas1', 
            background: '#f0f0f0',
            progress (percent) {
            },
            finish(url) {
                let imgs = self.data.imgs;
                imgs.push(url);

                self.setData({
                    imgs
                })
            },
            error (res) {
            }
        });

        let data = {
            list: [{
                type: 'wxml',
                class: '.share__canvas1 .draw_canvas', // draw_canvas指定待绘制的元素
                limit: '.share__canvas1', // 限定绘制元素的范围,取指定元素与它的相对位置
                x: 0,
                y: 0
            }]
        }

        this.drawImage1.draw(data);
    },
})

属性

初始化属性

new Wxml2Canvas(options) 时传入的options属性如下:

属性名类型默认值是否必填说明
elementString''画布的id
widthNumber0画布的宽,以iphone6的375为基准,其他机型按比例自动设置实际宽度
heightNumber0画布的高,同上
destZoomNumber3输出的图片的像素密度,不建议传值,如果需要控制图片大小,可以适当减小
zoomNumber1画布整体缩放比例,不建议传值,会覆盖各种机型的适配
translateXNumber0画布整体横向位移
translateYNumber0画布整体纵向位移
heightNumberheight * 2输出的图片的高度
backgroundString#ffffff画布的整体背景色
gradientBackgroundObjectnull画布整体的渐变背景色
finishFunctionnull绘制成功后回调函数, 返回值url,绘制图片的本地路径
progressFunctionnull绘制进度,返回值percent,0-100
errorFunctionnull绘制失败后回调函数,返回值object,包含具体原因

绘制失败的原因如下:

错误码原因说明
errcodeerrmsge
1000save canvas error保存图片失败
1001download pic error预下载图片失败
1002drawRect error绘制矩形失败
1003drawImage error绘制图片失败
1004drawText error绘制文本失败
1005drawCircle error绘制圆形图片失败
1006drawCircleImage error绘制圆形失败
1007drawLine error绘制线条失败
1008drawWxml error绘制Wxml失败
1009drawWxml preLoadImage error预下载Wxml图片失败

数据配置方式支持的格式

代码示例:

let data = {
    list: [{
        type: 'rect',
        x: 10,
        y: 10,
        style: {
            width: 150,
            height: 80,
            fill: '#3762ab',
            border: '10px solid #aaaaaa',
        }
    }
}

上述是一个矩形的创建方式,可看代码里的示例。下面是支持的属性:

矩形

属性类型是否必填说明
typeString'rect',声明为绘制矩形
xNumber坐标x
yNumber坐标y
style
widthNumber
heightNumber
fillString 或 Object填充颜色,支持渐变色
borderString边框,需要严格遵循 '10px dashed #540821' 格式
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray虚线边框的间距和偏移

圆形

属性类型是否必填说明
typeString'circle',声明为绘制圆形
xNumber坐标x
yNumber坐标y
style
rNumber半径
fillString 或 Object填充颜色,支持渐变色
borderString边框,需要严格遵循 '10px dashed #540821' 格式
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray虚线边框的间距和偏移

线条

属性类型是否必填说明
typeString'line',声明为绘制线条
xNumber起始坐标x
yNumber起始坐标y
x2Number终止坐标x
y2Number终止坐标y
style
widthNumber线条宽度
strokeString 或 Object填充颜色,支持渐变色
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray有此属性则绘制虚线,传入值为虚线边框的间距和偏移

图片

属性类型是否必填说明
typeString'image',声明为绘制图片
xNumber坐标x
yNumber坐标y
urlString图片链接,支持 http/https 及本地图片,域名需要在mp平台加入白名单
style
widthNumber
heightNumber
borderString边框,需要严格遵循 '10px dashed #540821' 格式
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray虚线边框的间距和偏移

圆形图片

属性类型是否必填说明
typeString'radius-image',声明为绘制圆形图片
xNumber坐标x
yNumber坐标y
urlString图片链接,支持 http/https 及本地图片,域名需要在mp平台加入白名单
style
rNumber半径
borderString边框,需要严格遵循 '10px dashed #540821' 格式
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray虚线边框的间距和偏移

文本

属性类型是否必填说明
typeString'text',声明为绘制文本
xNumber坐标x
yNumber坐标y
textString文本内容
style
widthNumber文本最大宽,超过则换行
heightNumber文本高度
colorString字体颜色
fontSizeNumber字体大小,默认14
fontFamilyString字体样式
lineHeightNumber字体行高,默认14 * 1.2
fontWeightString字体粗细,默认normal
lineClampNumber文字的最大行数,超出则用 ... 截取
whiteSpaceString是否换行,默认wrap,如果传入nowrap,则不换行
textAlignString文本的水平对齐方式,默认left
borderString边框,需要严格遵循 '10px dashed #540821' 格式
backgroundString字体背景色
boxShadowString阴影,需要严格遵循 '10 20 20 rgba(0, 0, 0, 0.4)' 格式
dashArray虚线边框的间距和偏移
paddingString内边距,'10 10 10 10', 与css有区别,依次为左、上、右、下,可以不带单位

此外,上述所有的元素都可以增加 delay:true 属性,来实现延迟绘制。

wxml转换的方式

如上面的使用示例,声明type为wxml时,会查询绘制元素节点的样式并绘制。下表是对应属性:

属性类型是否必填说明
typeString'wxml',声明转换wxml
xNumber坐标x,用于修正位置
yNumber坐标y,用于修正位置
classString待查询绘制的节点类名,会查询所有相同的类名
limitString限定节点的外围容器,在取坐标时,取与它的相对位置

目前支持的wxml类型如下,需要声明在节点上:

图片

属性类型是否必填说明
data-typeString'image',矩形图片
data-urlString图片链接
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置

圆形图片

属性类型是否必填说明
data-typeString'radius-image',圆形图片
data-urlString图片链接
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置

背景图片

属性类型是否必填说明
data-typeString'background-image',背景图片
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置

文本

属性类型是否必填说明
data-typeString'text',文本
data-textString文本内容
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置
data-paddingString内边距,与style叠加
data-backgroundString背景色

行内文本

属性类型是否必填说明
data-typeString'inline-text',行内文本
data-textString文本内容
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置
data-paddingString内边距,与style叠加
data-backgroundString背景色

行内图片

属性类型是否必填说明
data-typeString'inline-image',矩形图片
data-urlString图片链接
data-leftNumber修正横坐标位置
data-topNumber修正纵坐标位置

行内文本与图片有特殊处理逻辑,当top值相同时,按照从左到右顺序排列,可能会与展现有差异。

此外,上述所有的元素都可以增加 delay:Number 属性,来实现延迟绘制, number范围:1-100,间接实现层级控制。

Todo

  • 支持更多文本样式
  • 支持任意角度圆角

Keywords

wxml2canvas

FAQs

Package last updated on 03 Jun 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts