HTML5 Canvas繪圖

1.畫布基本知識(shí)

基礎(chǔ)畫圖:cxt.fillRect畫出一個(gè)矩形

? ? <body onload="pageLoad();">

? ? ? ? <canvas id="cnvMain" width="280px" height="190px"></canvas>

? ? </body>

? ?js:

? ? function ?pageLoad(){

? ? ? ? ? var ?cnv=document.getElementById("cnvMain");

? ? ? ? ? var ?cxt=cnv.getContext("2d");

? ? ? ? ?cxt.fillStyle="#ccc";

? ? ? ? ?cxt.fillRect(30,30,80,80);

? ? ? }

以上代碼實(shí)現(xiàn)在頁面加載之后畫出一個(gè)80*80的正方形;fillStyle實(shí)現(xiàn)畫出內(nèi)容的背景顏色;

2.繪制帶邊框的矩形

? ? ? ? ?//設(shè)置邊框

? ? ? ? cxt.strokeStyle="#666";

? ? ? ? cxt.strokeRect(30,30,150,80);

? ? ? ? //清空?qǐng)D形

? ? ? ?cxt.clearRect(36,36,138,68);

3.繪制漸變圖形

? ? 直接上代碼,具體用法代碼中有注釋:

? ? ? ?運(yùn)行結(jié)果展示:

4.在畫布中使用路徑

? ? 4.1 畫直線? moveTo和lineTo結(jié)合使用

? ? ? ? ? ?cxt.moveTo(x,y); ? ?找到起始點(diǎn)

? ? ? ? ? ?cxt.lineTo(x,y); ? ?從起始點(diǎn)開始畫一條直接到結(jié)束點(diǎn)

? ? ? ? ? ? ?以上代碼從(130,30)開始到(30,100)畫一條向下的斜線,再從(30,100)到(130,160)畫一條向上的斜線,效果如下:

? ?4.2 ?使用arc方法繪制圓形

? ? ? ? ? ? ? ?cxt.arc(x,y,radius,startAngle,endAngle,anticlockwise);

? ? ? ? ? ? ? ?x,y:表示繪制的起始橫縱坐標(biāo)

? ? ? ? ? ? ? ?radius:繪制圓形的半徑

? ? ? ? ? ? ? ?startAngle,endAngle:繪制圓形的開始和結(jié)束的角度,對(duì)用來話圓弧很方便;

? ? ? ? ? ? ? ?anticlockwise:繪制方向,true:順時(shí)針;false:逆時(shí)針繪制

? ? ? ? ? ? ? ? 案例1:一個(gè)實(shí)體圓形

? ? ? ? ? ? ? ? ? ? 結(jié)果:

? ? ? ? ? ? ? ? ? ? ? ?案例2:一個(gè)邊框圓形

? ? ? ? ? ? ? ? ? ? 結(jié)果:

? ? ? ? ? ? ? ? ? ? ?案例3:銜接圓形

?

? ? ? ? ? ? ? ? ? ? ?結(jié)果:

? ?4.3繪制漸變圓形

? ? ? ? cxt.createRadialGradient(30,30,0,20,20,400);

? ? ? ? 參數(shù)1和參數(shù)2,參數(shù)3:開始圓的圓心橫縱坐標(biāo)以及半徑

? ? ? ? 參數(shù)4和參數(shù)5,參數(shù)6:結(jié)束圓的橫縱坐標(biāo)和半徑

? ? ? ?結(jié)果:

5.對(duì)畫布中圖形的操作

? ? 圖形的移動(dòng),旋轉(zhuǎn),縮放分別對(duì)應(yīng)方法:translate(),rotate(),scale(),

? ? translate(x,y):x表示圖形在橫坐標(biāo)上移動(dòng)距離,大于0向右移動(dòng),小于0向左;

? ? ? ? ? ? ? ? ? ? ? ? ? y表示圖形在縱坐標(biāo)上移動(dòng)距離,大于0向上,小于0向左;

? ? ?rotate(angle):angle表示旋轉(zhuǎn)角度,大于0順時(shí)針,小于0逆時(shí)針;

? ? ?scale(x,y):x表示圖形在橫坐標(biāo)上縮放倍數(shù),大于0放大,小于0縮小;

? ? ? ? ? ? ? ? ? ? y表示圖形在縱坐標(biāo)上縮放倍數(shù),大于0放大,小于0縮??;

? ? ? 實(shí)例代碼:

? ? ?實(shí)例效果圖:

6.組合多個(gè)圖形

? ? 可以根據(jù)自己的要求將圖形交叉之后覆蓋或者顯示。通過修改上下文環(huán)境中的globalCompositeOperation屬性值來實(shí)現(xiàn)。source表示新圖形資源,destionation表示原圖形資源;

實(shí)例代碼:

結(jié)果:


7.添加圖形隱形

設(shè)置參數(shù):

?直接上代碼:

? ?實(shí)例預(yù)覽圖:

8.處理畫布中的圖像

? ? 使用drawImage方法進(jìn)行繪制畫布中的圖像;

? (1)cxt.drawImage(image,dx,dy);

? ? ? ? ? image:表示頁面中的圖像;,dx,dy表示圖像左上角的橫縱坐標(biāo)

?(2)cxt.drawImage(image,dx,dy,dw,dh);

? ? ? ? ? image:表示頁面中的圖像;,dx,dy表示圖像左上角的橫縱坐標(biāo); ?dw,dh表示圖像縮放至畫布中的寬高;

? (3)cxt.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);

? ? ? ? ? ? image,dx,dy, dw,dh使用如上;sx,sy,sw,sh表示需要剪裁的范圍;

實(shí)例代碼:


9.平鋪圖象

調(diào)用createPattern()方法關(guān)聯(lián)圖像。

實(shí)例代碼:

實(shí)例結(jié)果:


10.切割圖象

調(diào)用clip()方法切割畫布中繪制的圖像

實(shí)例代碼:

實(shí)例效果圖:

11.處理像素

可是實(shí)現(xiàn)對(duì)圖形進(jìn)行濾鏡效果,比較蒙版或者黑白。調(diào)用2個(gè)方法:1.getImageData()獲取像素;2.putImageData()用于將處理后的像素重新繪制到圖像中;

實(shí)例代碼:

以上代碼在谷歌中會(huì)出現(xiàn)如下問題:Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.

這是跨域的問題,在實(shí)際開發(fā)中圖片由服務(wù)器返回就不會(huì)報(bào)錯(cuò)。

12.畫布的其他應(yīng)用

12.1 ? 繪制文字

? ? ? ? 使用filleText()和StrokeText()進(jìn)行文字的繪制;

實(shí)例代碼:

結(jié)果頁面:

12.2 保存和恢復(fù)輸出圖形

? ? ? ?保存已繪制圖形:cxt.save();

? ? ? ?還原保存的圖形:cxt.restore();

? ? ? 保存的圖形輸出到瀏覽器:cxt.toDataURL(imgType);

? ? ?實(shí)例代碼:


實(shí)例結(jié)果:

操作說明:

點(diǎn)擊畫布第一次:出現(xiàn)第一個(gè)圖形點(diǎn)擊保存按鈕,將該圖形保存;

點(diǎn)擊畫布第二次:出現(xiàn)第二個(gè)圖形點(diǎn)擊恢復(fù)按鈕,將第一步保存的圖形恢復(fù)到棧中;

點(diǎn)擊畫布第三次:出現(xiàn)第三個(gè)圖形,頁面會(huì)從將第二步恢復(fù)的圖形填充到第三步繪制的圖形中

12.3 制作簡(jiǎn)單的動(dòng)畫

步驟1:自定義一個(gè)函數(shù),用戶圖形的移動(dòng)或者旋轉(zhuǎn)

步驟2:使用setInterval()方法設(shè)置動(dòng)畫執(zhí)行的間隔時(shí)間,販毒執(zhí)行該動(dòng)畫

實(shí)例代碼:

效果圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章內(nèi)容 理解 元素 繪制簡(jiǎn)單的 2D 圖形 使用 WebGL 繪制 3D 圖形 這個(gè)元素負(fù)責(zé)在頁面中設(shè)定一個(gè)區(qū)域...
    悶油瓶小張閱讀 986評(píng)論 0 0
  • 熟悉html5的程序員們肯定都知道 元素,該元素是用來在頁面中規(guī)定一塊區(qū)域,然后由js在該區(qū)域內(nèi)繪制圖形。canv...
    米幾V閱讀 2,334評(píng)論 1 5
  • canvas由Apple公司推出,現(xiàn)在大部分瀏覽器支持繪制2D圖形,3D圖形的繪制使用WebGL的3D上下文。 基...
    exialym閱讀 616評(píng)論 0 3
  • 一、簡(jiǎn)介 HTML5 中的定義:“它是依賴分辨率的位圖畫布,你可以在 canvas 上面繪制任何圖形,甚至加載照片...
    destiny0904閱讀 10,832評(píng)論 1 4
  • 轉(zhuǎn)載請(qǐng)聲明 原文鏈接 關(guān)注公眾號(hào)獲取更多資訊 這篇文章主要總結(jié)H5的一些新增的功能以及一些基礎(chǔ)歸納,這里只是一個(gè)提...
    前端進(jìn)階之旅閱讀 9,221評(píng)論 22 225

友情鏈接更多精彩內(nèi)容