本文編輯: JeremyLu瀏覽 4737
版權所有,嚴禁轉載
<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 |