<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)接口。
接口用法:
- wx.drawCanvas绘制接口
参数
|
类型
|
说明
|
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()
- })
- wx.createContext接口返回对象的方法列表:
方法
|
说明
|
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)
- }
- }