本文编辑: JeremyLu浏览 4356 版权所有,严禁转载
<canvas />
组件只能提供图像显示容器,不具备绘制能力,所以还需要使用脚本来完成实际的绘图任务,交由以下三个canvas API完成。
接口 | 说明 |
---|---|
wx.createContext() | 创建并返回绘图上下文context对象 |
wx.drawCanvas(OBJECT) | 绘制画布 |
wx.canvasToTempFilePath(OBJECT) | 把当前canvas上的内容保存为图片 |
wx.createContext()创建并返回一个context上下文对象,用于记录绘制操作,并返回actions数组,交给wx.drawCanvas(OBJECT)绑定<canvas />
组件,并将actions绘制在<canvas />
组件上;如果想将图像保存为图片,调用wx.canvasToTempFilePath(OBJECT)接口。
参数 | 类型 | 说明 |
---|---|---|
canvasId | String | 画布标识,传入<canvas /> 的canvas-id |
actions | Array | 绘图动作数组,由 wx.createContext 创建的 context,调用 getActions 方法导出绘图动作数组。 |
reserve | Boolean | 本次绘制是否接着上一次绘制,即reserve参数为false,则在本次调用drawCanvas绘制之前native层应先清空画布再继续绘制;若reserver参数为true,则保留当前画布上的内容,本次调用drawCanvas绘制的内容覆盖在上面,默认 false |
wxml
<canvas canvas-id="canvas" ></canvas>
js
var context = wx.createContext()
wx.drawCanvas({
canvasId: 'canvas',
actions: context.getActions()
})
方法 | 说明 |
---|---|
getActions | 返回绘制操作记录actions数组 |
clearActions | 清空context绘制操作记录 |
scale | 横纵坐标会被缩放 |
rotate | 以原点为中心,顺时针旋转当前坐标轴 |
translate | 对当前坐标系的原点(0, 0)进行变换,默认的坐标系原点为页面左上角。 |
save | 保存当前坐标轴的缩放、旋转、平移信息 |
restore | 恢复之前保存过的坐标轴的缩放、旋转、平移信息 |
clearRect | 在给定的矩形区域内,清除画布上的像素 |
fillText | 在画布上绘制被填充的文本 |
drawImage | 在画布上绘制图像 |
fill | 对当前路径进行填充 |
stroke | 对当前路径进行描边 |
beginPath | 开始一个路径 |
closePath | 关闭一个路径 |
moveTo | 把路径移动到画布中的指定点,但不创建线条 |
lineTo | 添加一个新点,然后在画布中创建从该点到最后指定点的线条 |
rect | 添加一个矩形路径到当前路径 |
arc | 添加一个弧形路径到当前路径,顺时针绘制 |
quadraticCurveTo | 创建二次方贝塞尔曲线 |
bezierCurveTo | 创建三次方贝塞尔曲线 |
setFillStyle | 设置填充样式 |
setStrokeStyle | 设置线条样式 |
setGlobalAlpha | 设置全局画笔透明度 |
setShadow | 设置阴影 |
setFontSize | 设置字体大小 |
setLineCap | 设置线条端点的样式 |
setLineJoin | 设置两线相交处的样式 |
setLineWidth | 设置线条宽度 |
setMiterLimit | 设置最大倾斜 |
canvas缩放、旋转、平移
wxml
<canvas canvas-id="canvas_scale"></canvas>
<canvas canvas-id="canvas_rotate"></canvas>
<canvas canvas-id="canvas_translate"></canvas>
js
onReady:function(){
var context = wx.createContext()
context.rect(5, 5, 30, 30)
context.stroke()
//缩放
context.scale(2,2)
context.stroke()
context.scale(2,2)
context.stroke()
wx.drawCanvas({
canvasId: 'canvas_scale',
actions: context.getActions()
})
context.clearActions()
context.rect(30, 30, 100, 100)
context.stroke()
//旋转
context.rotate(0.15)
context.stroke()
wx.drawCanvas({
canvasId: 'canvas_rotate',
actions: context.getActions()
})
context.clearActions()
context.rect(30, 30, 100, 100)
context.stroke()
//平移
context.translate(10, 10)
context.stroke()
wx.drawCanvas({
canvasId: 'canvas_translate',
actions: context.getActions()
})
}
wxss
canvas{
border: 1px solid #E0E0E0;
margin-top: 10px;
}
canvas绘制
wxml
<canvas canvas-id="canvas1"></canvas>
<canvas canvas-id="canvas2"></canvas>
js
onReady:function(){
var context = wx.createContext()
context.rect(15, 15, 100, 100)
context.fill()
context.stroke()
//清除指定范内的像素
context.clearRect(25, 25, 80, 80)
//显示文字
context.fillText('Text', 40, 40)
wx.drawCanvas({
canvasId: 'canvas1',
actions: context.getActions()
})
context.clearActions()
//显示图片
wx.chooseImage({
success: function(res) {
context.drawImage(res.tempFilePaths[0], 0, 0)
wx.drawCanvas({
canvasId: 'canvas2',
actions: context.getActions()
})
}
})
}
wxss
canvas{
border: 1px solid lightgray;
margin-top: 10px;
}
canvas路径
wxml
<canvas canvas-id="canvas1"></canvas>
js
onReady:function(){
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createContext()
context.setStrokeStyle("#00ff00")
context.setLineWidth(5)
context.rect(0, 0, 200, 200)
context.stroke()
context.setStrokeStyle("#ff0000")
context.setLineWidth(2)
context.moveTo(160, 100)
context.arc(100, 100, 60, 0, 2 * Math.PI, true)
context.moveTo(140, 100)
context.arc(100, 100, 40, 0, Math.PI, false)
context.moveTo(85, 80)
context.arc(80, 80, 5, 0, 2 * Math.PI, true)
context.moveTo(125, 80)
context.arc(120, 80, 5, 0, 2 * Math.PI, true)
context.stroke()
wx.drawCanvas({
canvasId: 'canvas1',
actions: context.getActions()
})
}
wxss
canvas{
height: 500px;
}
canvas样式
wxml
<canvas canvas-id="canvas1"></canvas>
<button type="default" size="default" bindtap="saveas">另存</button>
js
onReady:function(){
var context = wx.createContext()
context.setFillStyle("#FF00FF")
context.setStrokeStyle("#00FFFF")
context.setGlobalAlpha(1)
context.setShadow(10,10,10, '#000000')
context.setFontSize(18)
context.setLineWidth(3)
context.setLineCap('round');
context.setLineJoin('round')
context.rect(50, 50, 100, 100)
context.fill()
context.stroke()
wx.drawCanvas({
canvasId: 'canvas1',
actions: context.getActions()
})
},
//canvas另存为图片
saveas: function(e){
wx.canvasToTempFilePath({
canvasId: 'canvas1',
success: function(res){
console.log(res.tempFilePath)
}
}
scale:缩放
在调用scale方法后,之后创建的路径其横纵坐标会被缩放。多次调用scale,倍数会相乘。
参数 | 类型 | 描述 |
---|---|---|
scaleWidth | Number | 横坐标缩放的倍数,scaleWidth在0~1表示缩小,scaleWidth>1表示放大 |
scaleHeight | Number | 纵坐标轴缩放的倍数,scaleHeight在0~1表示缩小,scaleHeight>1表示放大 |
rotate:旋转
以原点为中心,原点可以用 translate方法修改。顺时针旋转当前坐标轴。多次调用rotate,旋转的角度会叠加。
参数 | 类型 | 描述 |
---|---|---|
rotate | Number | 旋转角度,以弧度计;degrees * Math.PI/180;degrees范围为0~360 |
translate:平移
对当前坐标系的原点(0, 0)进行变换,默认的坐标系原点为页面左上角。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 水平坐标平移量 |
y | Number | 竖直坐标平移量 |
clearRect:清除指定区域内容
清除画布上在该矩形区域内的内容。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 矩形区域左上角的x坐标 |
y | Number | 矩形区域左上角的y坐标 |
width | Number | 矩形区域的宽度 |
height | Number | 矩形区域的高度 |
drawImage:绘制图像
绘制图像,图像保持原始尺寸。
参数 | 类型 | 描述 |
---|---|---|
imageResource | String | 所要绘制的图片资源;通过chooseImage得到一个文件路径或者一个项目目录内的图片 |
x | Number | 图像左上角的x坐标 |
y | Number | 图像左上角的y坐标 |
width | Number | 图像宽度 |
height | Number | 图像高度 |
fillText:填充文本
在画布上绘制被填充的文本
参数 | 类型 | 描述 |
---|---|---|
text | String | 在画布上输出的文本 |
x | Number | 绘制文本的左上角x坐标位置 |
y | Number | 绘制文本的左上角y坐标位置 |
beginPath
开始创建一个路径,需要调用fill或者stroke才会使用路径进行填充或描边。同一个路径内的多次setFillStyle、setStrokeStyle、setLineWidth等设置,以最后一次设置为准。
closePage
关闭一个路径。
moveTo
把路径移动到画布中的指定点,不创建线条。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 目标位置的x坐标 |
y | Number | 目标位置的y坐标 |
lineTo
在当前位置添加一个新点,然后在画布中创建从该点到最后指定点的路径。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 目标位置的x坐标 |
y | Number | 目标位置的y坐标 |
rect:添加矩形
添加一个矩形路径到当前路径。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 矩形路径左上角的x坐标 |
y | Number | 矩形路径左上角的y坐标 |
width | Number | 矩形路径的宽度 |
height | Number | 矩形路径的高度 |
arc:画圆
添加一个弧形路径到当前路径,顺时针绘制。
参数 | 类型 | 描述 |
---|---|---|
x | Number | 矩形路径左上角的x坐标 |
y | Number | 矩形路径左上角的y坐标 |
radius | Number | 矩形路径的宽度 |
startAngle | Number | 起始弧度 |
sweepAngle | Number | 从起始弧度开始,扫过的弧度 |
quadraticCurveTo:二次贝塞尔曲线
创建二次贝塞尔曲线路径
参数 | 类型 | 描述 |
---|---|---|
cpx | Number | 贝塞尔控制点的x坐标 |
cpy | Number | 贝塞尔控制点的y坐标 |
x | Number | 矩形路径左上角的x坐标 |
y | Number | 矩形路径左上角的y坐标 |
bezierCurveTo:三次方贝塞尔曲线
创建三次方贝塞尔曲线路径
参数 | 类型 | 描述 |
---|---|---|
cp1x | Number | 第一个贝塞尔控制点的 x 坐标 |
cp1y | Number | 第一个贝塞尔控制点的 y 坐标 |
cp2x | Number | 第二个贝塞尔控制点的 x 坐标 |
cp2y | Number | 第二个贝塞尔控制点的 y 坐标 |
x | Number | 矩形路径左上角的x坐标 |
y | Number | 矩形路径左上角的y坐标 |
setFillStyle:设置颜色为填充样式
参数 | 类型 | 描述 |
---|---|---|
color | String | 设置为填充样式的颜色;’rgb(255, 0, 0)’或’rgba(255, 0, 0, 0.6)’或’#ff0000’格式的颜色字符串 |
setStrokeStyle:设置纯色描边
参数 | 类型 | 描述 |
---|---|---|
color | String | 设置纯色描边;’rgb(255, 0, 0)’或’rgba(255, 0, 0, 0.6)’或’#ff0000’格式的颜色字符串 |
setGlobalAlpha
置全局画笔透明度。
参数 | 类型 | 描述 |
---|---|---|
alpha | Number | 透明度,0 表示完全透明,1 表示完全不透明 |
setShadow:阴影
设置阴影样式
参数 | 类型 | 描述 |
---|---|---|
offsetX | Number | 阴影相对于形状在水平方向的偏移 |
offsetY | Number | 阴影相对于形状在竖直方向的偏移 |
blur | Number | 阴影的模糊级别,数值越大越模糊;0~100 |
color | Color | 阴影的颜色;’rgb(255, 0, 0)’或’rgba(255, 0, 0, 0.6)’或’#ff0000’格式的颜色字符串 |
setFontSize:字号
设置字体的字号。
参数 | 类型 | 描述 |
---|---|---|
fontSize | Number | 字体的字号 |
setLineWidth:线宽
设置线条的宽度
参数 | 类型 | 描述 |
---|---|---|
lineWidth | Number | 线条的宽度 |
setLineCap
设置线条的结束端点样式。
参数 | 类型 | 描述 |
---|---|---|
lineCap | String | 线条的结束端点样式;取值范围’butt’、’round’、’square’ |
setLineJoin
设置两条线相交时,所创建的拐角类型。
参数 | 类型 | 描述 |
---|---|---|
lineJoin | String | 两条线相交时,所创建的拐角类型;取值范围’bevel’、’round’、’miter’ |
setMiterLimit
设置最大斜接长度,斜接长度指的是在两条线交汇处内角和外角之间的距离。 当 setLineJoin为 miter 时才有效。超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。
参数 | 类型 | 描述 |
---|---|---|
miterLimit | Number | 最大斜接长度 |
wxml
<canvas canvas-id="canvas1"></canvas>
<button type="default" size="default" bindtap="saveas">另存</button>
js
saveas: function(e){
wx.canvasToTempFilePath({
canvasId: 'canvas1',
success: function(res){
console.log(res.tempFilePath)
}
}
参数 | 描述 |
---|---|
canvasId | 画布标识,传入<canvas /> 的 canvas-id |