更新记录

1.3.1(2021-09-10)

修复 scale属性导致drawText().then返回的draw_width位置不精确;

1.3.0(2021-07-01)

新增 设置画布宽度setCanvasWidth()和高度setCanvasHeight()

1.2.9(2021-07-01)

新增 drawRect函数新增设置边框大小(border_width)和颜色(border_color)并支持同时使用border_radius

查看更多

平台兼容性

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

r-canvas简介

插件名:r-canvas
插件说明:基于原生canvas绘制2D海报,canvas原生方法的二次封装,函数扩展,自定义函数,生成图片不失帧,还原真实画质,兼容性强,打造适配所有端,打造最好用的canvas插件,有问题请留言反馈,作者看到会第一时间快速修复并发版,还请留意更新公告!

r-canvas模板列表(码云)

r-canvas-example

r-canvas兼容性

此插件适应所有手机屏幕,承诺打造兼容所有端的r-canvas插件,待测试可以使用还请开发者们第一时间反馈,你们的支持是我更新插件的最大动力!~

平台 是否可用
iOS
Android
H5或Web
微信小程序
支付宝小程序 待测试
百度小程序 待测试
字节跳动小程序 待测试
QQ小程序 待测试
快应用 待测试
360小程序 待测试

使用方式

在template中引入组件

<r-canvas ref="rCanvas"></r-canvas>


在script中引入组件

import rCanvas from "@/components/r-canvas/r-canvas.vue"
export default{
    components:{
        rCanvas
    }
}

使用示例

onReady(){
    this.$nextTick(async ()=>{

        // 初始化
        await this.$refs.rCanvas.init({
            canvas_id:"rCanvas"
        })

        // 画图
        await this.$refs.rCanvas.drawImage({
            url:"/static/product_poster.png",
            x:0,
            y:0,
            w:375,
            h:630
        }).catch(err_msg=>{
            uni.showToast({
                title:err_msg,
                icon:"none"
            })
        })

        // 画文字
        await this.$refs.rCanvas.drawText({
            text:"精选好物",
            max_width:0,
            x:38,
            y:590,
            font_color:"rgb(175, 174, 175)",
            font_size:11
        }).catch(err_msg=>{
            uni.showToast({
                title:err_msg,
                icon:"none"
            })
        })

        // 生成海报
        await this.$refs.rCanvas.draw((res)=>{
            //res.tempFilePath:生成成功,返回base64图片
            // 保存图片
            this.$refs.rCanvas.saveImage(res.tempFilePath)
        })
    })
}




r-canvas方法说明

方法名称 参数类型 说明
init Object 初始化canvas
setCanvasWidth Number 设置canvas宽度
setCanvasHeight Number 设置canvas高度
drawImage Object 画图
drawText Object 画文字
drawRect Object 画正方图形
drawSpecialText Array 画多样性文字
fillRoundRect Object 画圆角矩形
clearCanvas 清空画布绘制的所有内容
draw Function 生成海报
saveImage String 保存海报

每个方法都有成功回调”.then()“ 和 错误回调”.catch()“,还请写上.catch捕捉错误信息方便调试错误。


init(Object)方法说明

参数名 默认值 类型 是否必填 说明
canvas_id String id唯一
scale 1 Number 缩放倍数,整数数值越大,清晰度越高,图片内存越大
global_alpha 1 Number 只支持0-1之间的小数,设置生成图片的整体透明度,例如:0.5
canvas_width uni.getSystemInfoSync().windowWidth Number 画布宽度,默认设备屏幕宽度
canvas_height uni.getSystemInfoSync().windowHeight Number 画布高度,默认设备屏幕高度
background_color #ffffff String 画布颜色
hidden false Boolean 是否隐藏画布不呈现在页面上




drawImage(Object)方法说明

参数名 默认值 类型 是否必填 说明
url String 支持本地图片、网络路径(需支持跨域)、baes64
x Number 图片横坐标
y Number 图片纵坐标
w Number 图片宽度
h Number 图片高度
border_width Number 边框大小
border_color String 边框颜色
is_radius false Boolean 是否开启圆图(已废弃,请使用border_radius)
border_radius 0 Number 圆角弧度,例:图片宽高20,想要实现圆图,请设置border_radius:10(宽或高的一半)




drawText(Object)方法说明

参数名 默认值 类型 是否必填 说明
text String 文字内容
x Number 文字横坐标
y Number 文字纵坐标
font_color #000 String 文字颜色
font_size 20 Number 文字大小
font_family Arial String 文字字体
text_align left String 文字对齐方式
left:居左
center:居中
right:居右
max_width Number 文字到达最大宽度,会自动换行
line_height 20 Number 文字行高,设置max_width属性才能生效
line_clamp Number 支持最大行数,设置max_width属性才能生效
line_clamp_hint ... String 超过line_clamp设置的行数则显示省略标识
line_through_height 0 Number 设置中划线高度,设置值即生效
line_through_color white String 中划线颜色
line_through_cap butt String 中划线左右两端类型
butt:默认
round:圆边
square:四方形边
font_style normal String 规定字体样式
normal:默认
italic:斜体的字体样式
oblique:倾斜的字体样式
font_variant normal String 规定字体变体
normal:默认
small-caps:小型大写字母的字体
font_weight normal String 规定字体的粗细
normal:默认
bold
bolder
lighter
100
200
300
400
500
600
700
800
900
is_line_break false Boolean 是否开启识别换行符自动换行
drawText(Object).then回调
参数名 类型 说明
draw_x Number 返回绘制的起始坐标x
draw_y Number 返回绘制的起始坐标y
draw_width Number 绘制的整体最大宽度
draw_height Number 绘制的整体最大高度
示例
this.$refs.rCanvas.drawText({
    text:"精选好物",
    max_width:0,
    x:38,
    y:590,
    font_color:"rgb(175, 174, 175)",
    font_size:11
}).then(res=>{
    // res.draw_x
    // res.draw_y
    // res.draw_width
    // res.draw_height
}).catch(err_msg=>{
    uni.showToast({
        title:err_msg,
        icon:"none"
    })
})




drawRect(Object)方法说明

参数名 默认值 类型 是否必填 说明
x Number 图形横坐标
y Number 图形纵坐标
w Number 图形宽度
h Number 图形高度
color String 图形颜色
border_width 0 Number 边框大小
border_color black String 边框颜色




drawSpecialText(Array)方法说明

general参数说明 参数名 默认值 类型 是否必填 说明
x Number 文字x坐标
y Number 文字y坐标

list参数说明

参数名 默认值 类型 是否必填 说明
text String 文字内容
x Number 文字横坐标(系统只取数组下标为0的数据,只设置数组为0的x值即可)
y Number 文字纵坐标(系统只取数组下标为0的数据,只设置数组为0的y值即可)
font_color #000 String 文字颜色
font_size 20 Number 文字大小
font_family Arial String 文字字体

示例

await this.$refs.rCanvas.drawSpecialText({
    general:{
        x:20,
        y:480,
    },
    list:[
        {
            text:'¥',
            font_color:'red',
            font_size:15
        },
        {
            text:'5999',
            font_color:'red',
            font_size:24
        },
        {
            text:'+',
            font_color:'rgb(255, 101, 3)',
            font_size:24,
            margin_top:2,
        },
        {
            text:'9999',
            font_color:'rgb(165, 26, 251)',
            font_size:20
        },
        {
            text:'劵',
            font_color:'rgb(165, 26, 251)',
            font_size:15
        },
    ]
}).catch(err=>{
    uni.showToast({
        title:err,
        icon:'none'
    })
})




fillRoundRect(Object)方法说明

参数名 默认值 类型 是否必填 说明
x Number 矩形横坐标
y Number 矩形纵坐标
w Number 矩形宽度
h Number 矩形高度
radius Number 矩形圆角弧度
fill_color String 矩形颜色




draw(Function)方法说明

参数名 默认值 类型 是否必填 说明
callback Function 成功回调,也可以用.then获取成功回调




saveImage(String)方法说明

保存图片到本地




clearCanvas()方法说明

清空画布绘制的所有内容




setCanvasWidth(Number)方法说明

设置画布宽度,建议在init函数设置画布宽度,init函数有canvas_width属性

例子:
this.$refs.rCanvas.setCanvasWidth(375)




setCanvasHeight(Number)方法说明

设置画布高度,建议在init函数设置画布高度,init函数有canvas_height属性

例子:
this.$refs.rCanvas.setCanvasHeight(500)




如果r-canvas没有你需要的函数,请反馈留言,也可以使用以下方式自行扩展canvas原生方法,谢谢理解

//ctx字段相当于原生canvas对象,可自行扩展canvas原生方法
this.$refs.rCanvas.ctx




学习交流微信

交流微信

隐私、权限声明

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

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

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

许可协议

MIT协议

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