1. 程式人生 > >canvas 繪制圖形

canvas 繪制圖形

.html script alpha iam 二次貝塞爾曲線 creat -m 屬性 其他

什麽是canvas?

   <canvas> 元素用於圖形的繪制,通過腳本 (通常是JavaScript)來完成.

   <canvas> 標簽只是圖形容器,您必須使用腳本來繪制圖形。

方法屬性

  顏色、樣式和陰影

屬性

描述

fillStyle

設置或返回用於填充繪畫的顏色、漸變或模式。

strokeStyle

設置或返回用於筆觸的顏色、漸變或模式。

shadowColor

設置或返回用於陰影的顏色。

shadowBlur

設置或返回用於陰影的模糊級別。

shadowOffsetX

設置或返回陰影與形狀的水平距離。

shadowOffsetY

設置或返回陰影與形狀的垂直距離。

方法

描述

createLinearGradient()

創建線性漸變(用在畫布內容上)。

createPattern()

在指定的方向上重復指定的元素。

createRadialGradient()

創建放射狀/環形的漸變(用在畫布內容上)。

addColorStop()

規定漸變對象中的顏色和停止位置。

  線條樣式

屬性

描述

lineCap

設置或返回線條的結束端點樣式。

lineJoin

設置或返回兩條線相交時,所創建的拐角類型。

lineWidth

設置或返回當前的線條寬度。

miterLimit

設置或返回最大斜接長度。

  矩形

方法

描述

rect()

創建矩形。

fillRect()

繪制"被填充"的矩形。

strokeRect()

繪制矩形(無填充)。

clearRect()

在給定的矩形內清除指定的像素。

  路徑

方法

描述

fill()

填充當前繪圖(路徑)。

stroke()

繪制已定義的路徑。

beginPath()

起始一條路徑,或重置當前路徑。

moveTo()

把路徑移動到畫布中的指定點,不創建線條。

closePath()

創建從當前點回到起始點的路徑。

lineTo()

添加一個新點,然後在畫布中創建從該點到最後指定點的線條。

clip()

從原始畫布剪切任意形狀和尺寸的區域。

quadraticCurveTo()

創建二次貝塞爾曲線。

bezierCurveTo()

創建三次貝塞爾曲線。

arc()

創建弧/曲線(用於創建圓形或部分圓)。

arcTo()

創建兩切線之間的弧/曲線。

isPointInPath()

如果指定的點位於當前路徑中,則返回 true,否則返回 false。

ellipse()

創建橢圓(chrome34以及Opera18以上支持)

setLineDash()

創建虛線(Chrome26/Firefox28/IE11/Opera18/Safari7以上)

  轉換

方法

描述

scale()

縮放當前繪圖至更大或更小。

rotate()

旋轉當前繪圖。

translate()

重新映射畫布上的 (0,0) 位置。

transform()

替換繪圖的當前轉換矩陣。

setTransform()

將當前轉換重置為單位矩陣。然後運行 transform()。

  文本

屬性

描述

font

設置或返回文本內容的當前字體屬性。

textAlign

設置或返回文本內容的當前對齊方式。

textBaseline

設置或返回在繪制文本時使用的當前文本基線。

方法

描述

fillText()

在畫布上繪制"被填充的"文本。

strokeText()

在畫布上繪制文本(無填充)。

measureText()

返回包含指定文本寬度的對象。

  圖像繪制

方法

描述

drawImage()

向畫布上繪制圖像、畫布或視頻。

  像素操作

屬性

描述

width

返回 ImageData 對象的寬度。

height

返回 ImageData 對象的高度。

data

返回一個對象,其包含指定的 ImageData 對象的圖像數據。

方法

描述

createImageData()

創建新的、空白的 ImageData 對象。

getImageData()

返回 ImageData 對象,該對象為畫布上指定的矩形復制像素數據。

putImageData()

把圖像數據(從指定的 ImageData 對象)放回畫布上。

  合成

屬性

描述

globalAlpha

設置或返回繪圖的當前 alpha 或透明值。

globalCompositeOperation

設置或返回新圖像如何繪制到已有的圖像上。

  其他方法

方法

描述

save()

保存當前環境的狀態。

restore()

返回之前保存過的路徑狀態和屬性。

createEvent()

getContext()

toDataURL()

繪制步驟

  獲取canvas對象

var oCanvas = document.getElementById("canvas");

  取得上下文context

var context = oCanvas.getContext("2d");

  繪制圖形

    根據需求選擇方法

舉例繪制方法

  繪制長方形/邊框/填充色彩

技術分享

Context.lineWidth=1;

Context.fillRect(x,y,width,height);

Context.strokeRect(x,y,width,height);   

  繪制圓形

技術分享

Context.beginPath();

Context.arc(x,y,radius,startAngle,endAngle,anticlockwise);(for循環圓心、半徑)

Context.closePath();

Context.fillStyle=’rgba(255,0,0,0.25)’

Context.fill()

ellipse(x,y,radiusX,radiusY,rotation,startAngle,endAngle,anticlockwise)

  繪制直線

技術分享

Context.moveTo(20,20);

Context.lineTo(20,200);

Context.lineWidth=10;

Context.lineCap=”round”;

Context.lineJoin=”round”;

Context.stroke();

Context.setLineDash([5,15])

繪制曲線

  圓弧

技術分享

(x0,y0)當前坐標點,(x1,y1)控制點坐標,(x2,y2)圓弧終點坐標

Context.arcTo(x1,y1,x2,y2,radiusX)

   二次貝塞爾曲線

技術分享

開始點:moveTo(20,20)

控制點 1:quadraticCurveTo(20,100,200,20)

結束點:quadraticCurveTo(20,100,200,20) 

Context. quadraticCurveTo(cpx,cpy,x,y)

(cpx,cpy)控制點坐標,(x,y)終點坐標

   三次貝塞爾曲線

技術分享

開始點:moveTo(20,20)

控制點 1:bezierCurveTo(20,100,200,100,200,20)

控制點 2:bezierCurveTo(20,100,200,100,200,20)

結束點:bezierCurveTo(20,100,200,100,200,20) 

Context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);

(cp1x,cp1y)第一個控制點,(cp2x,cp2y)第二個控制點,(x,y)終點

繪制漸變圖形

  線性漸變

技術分享

Var grd=context.createLinearGradient(xStart,yStart,xEnd,yEnd)

(xStart,yStart)起點,(xEnd,yEnd)終點

grd.addColorStop(offset,color);

offset範圍是0~1之間的浮點數,color是關鍵顏色

   徑向漸變

技術分享

Var grd=context.createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd);

(xStart,yStart,radiusStart)起點圓的中心點坐標和半徑,(xEnd,yEnd,radiusEnd)終點圓的中心點坐標和半徑

  坐標變換

技術分享

Context.translate(x,y)

Context.scale(x,y);

Context.rotate(angle);

  繪制陰影

Context.shadowOffetX:陰影橫向位移量

Context.shadowOffetY:陰影縱向位移量

Context.shadowColor:陰影顏色

Context.shadowBlur陰影的模糊範圍

  繪制圖片

Var image=new Image();

image.src=” http://img4.duitang.com/uploads/item/201406/25/20140625182321_4MTau.thumb.700_0.jpeg”;

image.onload=function(){}

Context.drawImage(image,x,y);

Context.drawImage(image,x,y,w,h);

Context.drawIamge(image,sx,sy,sw,sh,dx,dy,dw,dh);

  圖片平鋪

技術分享

Var pat= context.createPattern(image,”repeat”);

Context.fillStyle=pat;

Context.fillRect(0,0,400,300);

   圖片裁剪

技術分享

  先繪制好路徑

Context.clip();

  組合圖形

Context.globalCompositeOperation=type;

技術分享

  組合圖像

Context.globalCompositeOperation=type;

Type值

Normal:默認模式

Darken:變暗模式

Lighten:變亮模式

Multiply:正片疊底

Screen:濾色模式

Color-burn:顏色加深

Color-dodge:顏色減淡

Hard-light:強光模式

Soft-light:柔光模式

Overlay:疊加模式

Difference:差值模式

Exclusion:排除模式

  繪制文字

Context.fillStyle=’#00F’;

Context.font=”bold 30px sans-serif”;

Context.fillText(“hello world”,0,0);

Context.strokeText(“hello world”,0,0);

Var metrics=context.measureText(text);

  保存與恢復狀態

Context.save();

Context.restore();

canvas 繪制圖形