更新记录

3.1.6(2023-02-20)

更新新版地址

老插件不再维护

3.1.5(2022-11-24)

细节修改

3.1.4(2022-11-08)

\n 换行失效的bug

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 app-vue × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

sakura-canvas(海报生成器)

新版地址: https://ext.dcloud.net.cn/plugin?id=10960

公告

本次更新为一次大更新,重新架构插件结构,之前的js隐性多继承太low了。!!!这次更新没有完全向下兼容!!!,一些地方需要做出改变。

如有不懂的地方先查看示例项目或者添加下面的联系方式,联系本人。!!!

1) 新增了监听回调 !!! 重要更新

2) 新增了修改画布宽高方法 draw.setCanvasStyle(宽度, 高度)

3) 新增了修改导出画布样式的方法draw.setExportImageStyle

4) 修复了一些问题 比如:字节跳动小程序导出的图片太模糊,性能问题 ...

5) 新增动态设置画布大小

6) Draw类初始化参数改变

1,fileType,quality参数移至exportImageStyle属性

2、exportDelayTime改名为exportImageDelayTime

3、新增fontStyle属性用于设置字体的全局样式

4、新增exportImageTips属性用于导出图片时的提示

5、移除success属性,移至到监听(init)事件

7) 一些方法改名

1、 createPoster方法改名为drawPoster

2、callBack回调改名为callback !!!

8) 这次更新之后不在内部调用绘制背景,需要用户自行调用方法!!!方法名称为drawBackground!!!

9) 本次更新完善2d绘制不在只限制微信小程序,目前可用于字节跳动,微信,支付宝小程序。

10)更新示例项目,

1、添加v3写法与v2写法的示例

2、更新动态画布大小的示例

联系方式

QQ: 2445263384

提示:

1、最好引入示例项目看一下如何使用

2、现已支持小程序2d绘制(微信小程序,字节跳动小程序,支付宝小程序均可使用)

3、已支持钉钉小程序(不支持2d绘制)

4、绘制文字已添加高亮文字!!!

5、绘制文字已添加文本框, 可以用来为文字添加边框,可以是边框也可以是填充的背景色

6、矩形,矩形图片圆角属性已实现设置多个不同圆角角度

感谢话语

非常感谢QQ: 119582291 对本项目的bug修复于2d绘制的完善!!!

引入

import Draw from '@/uni_modules/sakura-canvas/js_sdk/index'

Draw类初始化属性

属性名称 类型 默认值 可选值 是否必填 说明
width Number 0 画布的宽度
height Number 0 画布的高度
canvasId String canvas-id
_this This 当前页面的this
background Object DrawBackground 画布的背景
type String 2d 2d绘制(微信小程序,字节跳动小程序,支付宝小程序)
unit String px px, rpx 画图时的单位
fontStyle Object Font 全局字体默认样式
exportImageStyle Object ExportImageStyle 导出图片的样式
drawDelayTime Number 200 绘制海报时的延迟时间(单位毫秒)
exportImageDelayTime Number 200 导出图片时的延迟时间(单位毫秒)
showDrawTips Boolean true 是否显示绘制时的加载提示
drawTipsText Stirng 绘制中... 随意文字 绘制时的加载提示
showExportImagesTips Boolean true 是否显示导出图片时的提示
exportImageTips String 导出图片中 随意文字 导出图片时的提示
const draw = new Draw({
    width: 375,
    height: 500,
    canvasId: 'myCanvas',
    _this: this,
    unit: 'px',
    background: {
        type: 'color', 
        color: '#fffff',
        w: 375,
        h: 500
    },
    exportImageStyle:{
        // 导出图片的类型只支持 JPG/PNG
        fileType: 'png',
        // 导出图片的质量 0~1之间
        quality: 1
    },
    drawDelayTime: 200,
    exportImageDelayTime: 200,
    drawTipsText: '绘制中...',
    exportImageTips: '导出图片中...'
})

Draw监听回调

事件名称 用处
init 画布初始化完成可以绘制背景图片,画布内容
background 绘制背景完成,可以在这里监听背景图片的大小,用于动态修改画布大小
drawComplete 绘制内容完成,可以在这里监听绘制出来的内容大小,用于动态修改画布大小
import Draw from '@/uni_modules/sakura-canvas-js/js_sdk'
const draw = new Draw({
    width: 375,
    height: 500,
    canvasId: 'myCanvas',
    _this: this,
    unit: 'px',
    background: {
        type: 'color', 
        color: '#fffff',
        w: 375,
        h: 500
    },
    exportImageStyle:{
        // 导出图片的类型只支持 JPG/PNG
        fileType: 'png',
        // 导出图片的质量 0~1之间
        quality: 1
    },
    drawDelayTime: 200,
    exportImageDelayTime: 200,
    drawTipsText: '绘制中...',
    exportImageTips: '导出图片中...'
})
// init: 初始化完成可以绘制画布背景(现在画布背景需要自行调用方法绘制),等同于之前的success属性
draw.$on('init', () => {
    // 绘制画布背景
    await draw.drawBackground()
})
// background: 绘制画布背景完成,会具体返回背景的宽度高度和一个style(不需要监听时可以不监听)
// 用于当背景为图片(mode: widthFix/heightFix)时不确定的宽度/高度,可以动态修改画布的宽
draw.$on('background', async result => {
    // w: 背景宽度 h: 背景高度
    const { w, h } = result
    // 可以在此处调用setCanvasStyle方法用于修改画布大小
})
// drawComplete: 用于监听绘制完成事件, 可以返回当前画布的宽度高度和已经绘制完成内容的高度, 用于当前的情况,不确定画布高度时,动态修改画布的高度
draw.$on('drawComplete', async result => {
    // width: 设置的画布的宽度
    // height:设置的画布的高度
    // contentWidth: 绘制出来的内容宽度
    // contentWidth: 绘制出来的内容高度
    const { width, height, contentHeight, contentWidth } = result
    // 可以在此处调用setCanvasStyle方法用于修改画布大小
})

目录

绘制类型
绘制文字 点我跳转
绘制矩形 点我跳转
绘制圆形 点我跳转
绘制图片 点我跳转
绘制三角形 点我跳转
绘制线条 点我跳转
绘制二维码 点我跳转
JSON方式绘制海报 点我跳转

绘制文字 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
w Number 0 文字的宽度
提示: 不填写文字宽度时可以在
callBack中可以获取当前文字的宽度
text String 文字的内容
提示: 已支持使用\n换行(你好\n世界)
color String #000000 颜色
textIndent Number 0 文字首行缩进
textAlign String none 默认: none
居中: center
靠右: right
文字水平对齐方式
lastWidth Number 当限制文字行数时最后一行的宽度
font Object Font 文字样式
line Object LineHeight 文字行数, 文字行高之类的
alpha Number 1 透明度
isFill Boolean true 是否为填充文字
windowAlign String none 默认: none
居中: center
靠右: right
文字在窗口(整个画布的宽度)对齐的方式
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
highlightText Array HighlightText 文字高亮
textRect Object textRect 绘制文字边框
callBack Function CallBack 绘制回调

绘制矩形 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
w Number 0 宽度
h Number 0 高度
r Number | Array 0 圆角角度
number: 全圆角角度大小
array: [上, 右, 下, 左], 可以与css样式一样。简写
[上下, 左右], [上, 左右, 下], [全部]
tips: 这个已经可以替代borderType属性
alpha Number 1 0~1 透明度
borderType Aarray ['default'] tr:右上; tl: 左下; br: 右下; bl: 左下;default: 全圆角 圆角的方向
值类型为数组, 添加不同的圆角方向设置哪里是圆角哪里不是圆角
color String #000000 背景颜色
borderWidth Number 0 边框宽度
borderColor String #000000 边框颜色
isFill Boolean true true, false 是否是填充矩形
lineWidth Number 0 当不是填充矩形时,边框的大小
windowAlign String none 默认: none
居中: center
靠右: right
矩形在窗口(整个画布的宽度)对齐的方式
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
rotate Object Rotate 矩形旋转
gradient Object Gradient 渐变色,当使用这个时,color: 将失效
shadow Object Shadow 阴影
callback Function callback 绘制回调

绘制圆形 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
r Number 0 圆形半径
s Number 0 画圆时起始弧度
e Number Math.PI * 2 画圆时结束弧度
d Boolean false 指定弧度的方向是逆时针还是顺时针; 默认: 顺时针
alpha Number 1 0~1 透明度
color String #000000 背景颜色
borderWidth Number 0 边框宽度
borderColor String #000000 边框颜色
isFill Boolean true true, false 是否是填充圆形
lineWidth Number 0 当不是填充圆形时,边框的大小
windowAlign String none 默认: none
居中: center
靠右: right
圆形在窗口(整个画布的宽度)对齐的方式
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
rotate Object Rotate 圆形旋转
gradient Object Gradient 渐变色,当使用这个时,color: 将失效
shadow Object Shadow 阴影
callback Function callback 绘制回调

绘制图片 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
w Number 0 宽度
h Number 0 高度
src String 图片资源地址(网络路径, 本地路径, base64)
提示: 小程序需要配置网络路径的白名单
r Number |Array 0 圆角角度(当绘制类型为rect时圆角的大小, 和矩形一样可以设置不同圆角的大小)
drawType String default 默认: default
矩形: rect
圆形: arc
图片绘制类型;
mode String aspectFill aspectFill
aspectFit
widthFix
heightFix
图片模式
alpha Number 1 0~1 透明度
color String #000000 背景颜色
borderWidth Number 0 边框宽度
borderColor String #000000 边框颜色
windowAlign String none 默认: none
居中: center
靠右: right
图片在窗口(整个画布的宽度)对齐的方式
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
rotate Object Rotate 图片旋转
shadow Object Shadow 阴影
callback Function callback 绘制回调

绘制三角形 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
w Number 0 宽度
h Number 0 高度
alpha Number 1 0~1 透明度
color String #000000 背景颜色
drawType String issceles isosceles: 等腰三角形; right: 直角三角形; custom: 自定义 三角形类型
提示自定义时,x, y, 宽, 高都不需要传递。需要传递绘制点的坐标类型是数组(coordinate)
coordinate Array [] [[x1, y1], [x2, y2], [x3, y3]]
borderWidth Number 0 边框宽度
borderColor String #000000 边框颜色
isFill Boolean true true, false 是否是填充三角形
lineWidth Number 0 当不是填充三角形时,边框的大小
windowAlign String none 默认: none
居中: center
靠右: right
三角形在窗口(整个画布的宽度)对齐的方式
提示: 三角形为自定义时失效
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
rotate Object TriangleRotate 三角形旋转
callback Function callback 绘制回调

绘制线条 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
w Number 0 宽度
lineWidth Number 1 线条高度
alpha Number 1 0~1 透明度
color String #000000 颜色
lineType String solid 实线: solid
虚线:dashed
线条类型
pattern Array [5, 5] 当线条类型为虚线是生效
offset Number 5 虚线偏移量
lineCap String butt butt, round, square 线条端点样式
callback Function callback 绘制回调

绘制二维码 返回目录

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 x轴位置
y Number 0 y轴位置
size Number 100 二维码大小
text String 二维码内容
image Object QrCodeImage 二维码中间的图片
background String #ffffff 二维码背景色
foreground String #000000 二维码前景色
pdground String #000000 二维码角标色
lv Number 3 容错级别(一般不需要调它)
windowAlign String none 默认: none
居中: center
靠右: right
二维码在窗口(整个画布的宽度)对齐的方式
offsetRight Number 0 当使用windowAlign时可以设置右边空出的间距
比如: windowAlign: 'right', 靠右。但是我要不直接顶着右边,需要控制在靠右边20rpx|px距离就设置这个属性;
offsetRight: 20
callBack Function CallBack 绘制回调

特殊类型参数

DrawBackground 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
type String 纯色: color;
图片: image
背景类型
纯色: 详看绘制矩形时的参数 点我跳转
图片: 详看绘制图片时的参数 点我跳转

ExportImageStyle 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 画布x轴起点(默认0)
y Number 0 画布y轴起点(默认0)
width Number canvas宽度-x 画布宽度(默认为canvas宽度-x)
height Number canvas高度-y 画布高度(默认为canvas高度-y)
destWidth Number width * 屏幕像素密度 输出图片宽度(默认为 width * 屏幕像素密度)
destHeight Number height * 屏幕像素密度 输出图片高度(默认为 height * 屏幕像素密度)
fileType String png 目标文件的类型,只支持 'jpg' 或 'png'。默认为 'png'
quality Number 1 图片的质量,取值范围为 (0, 1),不在范围内时当作1.0处理

Font 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
size Number 16 文字大小
family String sans-serif 文字字体
style String normal 默认:normal;
斜体: italic
倾斜体: oblique
文字样式
weight String | Number normal normal, bold, 数字 文字加粗

LineHeight 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
num Number -1 文字行数
不限制: -1
height Number 16 行高
style String none 默认: none
下划线: underline
删除线: lineThrough
样式
type String solid 实线: solid
虚线 : dashed
线类型
width Number 1 线宽度

HighlightText(注意这是一个数组对象,下面描述对象属性值) 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
text String 高亮文字(我)
color Stirng 颜色
size Number 重置的字体大小
weight String 重置的字体粗体
style String 重置的文字样式
family Stirng 重置的文字字体
siblingsCenter String bottom center: 居中
top: 上
bottom: 下
和兄弟字体的对其方式
siblingsNum Number 0 和兄弟字体对其的差值
因为在不同端,绘制字体的位置都不一样,设置这个属性可以改变在不同端不一样导致的差异

textRect 点我返回

tips: 在微信小程序上绘制的边框可能并不是那种和文字非常的对称的敬请谅解

属性名称 类型 默认值 可选值 是否必填 说明
show Boolean false 是否显示
vorizontal Number 必填 水平(左右两边的间隔大小)
vertical Number 必填 垂直(上下两边的间隔大小)
isFill Boolean true 是否是填充矩形边框
(其实从这里开始后面的参数就是绘制矩形时的参数了,
我这里就列出几个常用的几个参数,
剩下的参数可参考绘制矩形的参数)
color String #00000 背景色
r Number 圆角角度
lineWidth Number 当不是填充矩形时,矩形的边框大小

Rotate 返回绘制矩形 返回绘制圆形 返回绘制图片

属性名称 类型 默认值 可选值 是否必填 说明
deg Number 0 旋转角度
type String middle 上左: topLeft
上中: topMiddle
上右: topRight
中左: middleLeft
中心: middle
中右: middleRight
下左: bottomLeft
下中: bottomMiddle
下右: bottomRight
旋转中心点

QrCodeImage 返回绘制二维码

属性名称 类型 默认值 可选值 是否必填 说明
size Number 图片大小
src String 图片路径
r Number 圆角
color String #fff 背景色
borderWidth Number 0 边框大小
borderColor String 边框颜色

TriangleRotate 返回绘制三角形

属性名称 类型 默认值 可选值 是否必填 说明
deg Number 0 旋转角度
type String middle 中心: middle
左: left
右: right
旋转中心点

Gradient 返回绘制矩形 返回绘制圆形

属性名称 类型 默认值 可选值 是否必填 说明
show Boolean false 是否显示
type String linear 线性: linear
圆形: circle
渐变类型
relative Boolean true position的参数是否相对于容器
position Object {} 线性渐变参数
圆形渐变参数
colors Array [] 渐变colors参数
渐变点,至少要两个
// 线性
const react = {
    type: 'rect',
    w: 400,
    h: 200,
    gradient: {
        show: true,
        position: {
            x0: 0,
            y0: 0,
            x1: 400,
            y1: 0
        },
        colors: [{
            stop: 0,
            color: 'red'
        }, {
            stop: 1,
            color: 'white'
        }]
    }
}
// 圆形
const circle = {
    type: 'arc',
    y: 200,
    r: 100,
    gradient: {
        show: true,
        type: 'circle',
        position: {
            x: 0,
            y: 0,
            r: 50,
        },
        colors: [{
            stop: 0,
            color: 'red'
        }, {
            stop: 1,
            color: 'white'
        }]
    }
}

线性渐变Position参数 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
x0 Number 0 起点的x坐标
y0 Number 0 起点的y坐标
x1 Number 0 终点的x坐标
y1 Number 0 终点的y坐标

圆形渐变Position参数 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
x Number 0 圆心的x坐标
y Number 0 圆心的y坐标
r Number 0 圆的半径

渐变colors参数 点我返回

属性名称 类型 默认值 可选值 是否必填 说明
stop Number 0~1 表示渐变点在起点和终点中的位置
color String 颜色

Shadow 阴影参数 返回绘制矩形 返回绘制圆形 返回绘制图片

属性名称 类型 默认值 可选值 是否必填 说明
show Boolean false 是否显示
x Number 0 阴影相对于形状在水平方向的偏移
y Number 0 阴影相对于形状在竖直方向的偏移
blur Number 0 阴影的模糊级别,数值越大越模糊
String String #000000 阴影的颜色

callback 返回绘制文字 返回绘制矩形 返回绘制圆形 返回绘制图片 返回绘制线条 返回绘制二维码 返回绘制三角形

 callback: (before, all) => {
     let { sx, sy, ex, ey, w, h } = before
     // sx: 上一次绘制内容开始的x轴位置
     // sy: 上一次绘制内容开始的y轴位置
     // ex: 上一次绘制内容结束的x轴位置
     // ey: 上一次绘制内容结束的y轴位置
     // w: 上一次绘制内容的宽度
     // h: 上一次绘制内容的高度
     // callback 返回的对象会覆盖原属性
     return {
         x: sx,
         y: sy
     }
 }

JSON方式绘制海报 返回目录

const res = await draw.drawPoster(({ bgObj, ctxObj }) => {
    // bgObj: 背景的宽高
    // ctxObj: 画布的宽高
    // 文字
    const text = {
        type: 'text',
        // 查看绘制文字的参数
    }
    // 矩形
    const react = {
        type: 'rect',
        // 查看绘制矩形的参数
    }
    // 圆形
    const arc = {
        type: 'arc',
        //  查看绘制圆形的参数
    }
    // 三角形
    const triangle = {
        type: 'triangle',
        // 查看绘制三角形的参数
    }
    // 线条
    const line = {
        type: 'line',
        // 查看绘制线条的参数
    }
    // 图片
    const image = {
        type: 'image',
        // 查看绘制图片的参数
    }
    // 二维码
    const qrcode = {
        type: 'qrcode',
        // 查看绘制二维码的参数
    }
    // 自定义绘制
    const custom = {
        type: 'custom',
        setDraw(Context) {
            // 原生方法绘制
            Context.fillText('你好', 0, 200)
        }
    }
    return [ react, arc, text ]
})
let { success, message, data } = res
// succes: 是否绘制成功
// message: 绘制成功与失败时的提示
// data: 绘制成功时返回的图片地址

[#textRect]:

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问