天天看點

【HTML5初探之繪制圖像(下)】看我canvas元素引領下一代web頁面

導航

【初探HTML5之使用新标簽布局】用html5布局我的部落格頁!

【HTML5初探之form标簽】解放表單驗證、增加檔案上傳、內建拖放

【HTML5初探之繪制圖像(上)】看我canvas元素引領下一代web頁面

【HTML5初探之繪制圖像(下)】看我canvas元素引領下一代web頁面

【HTML5初探之多媒體元素】視訊播放HTML5、Flash誰才是王道?

【HTML5初探之本地存儲】如果沒有資料庫。。。

【HTML5初探之離線應用】如何打造零請求、無流量的網站?

【HTML5初探之通信API】跨域門檻不再高、資料推送不是夢

【HTML5初探之Web Workers】網頁也能多線程

【HTML5初探之Geolocation API】讓我們來回去地理資訊

繪制漸變圖形

複制代碼

fillStyle除了指定顔色外,還可以指定填充對象。

繪制線性漸變時,需要用到LinearGradient對象,建立函數為:

createLinearGradient(xStart, yStart, xEnd, yEnd);

xStart為漸變起始橫坐标

yStart為漸變起始縱坐标

xEnd為漸變結束橫坐标

yEnd為漸變結束縱坐标

通過該方法可以建立一個使用兩個坐标點的LinearGradient對象。

而後在通過addColorStop進行顔色設定:

addColorStop(offset, color)

offset為所設定顔色離開起始點的偏移量(0,1之間)

color為指定的顔色。

因為是漸變至少需要使用兩次addColorStop方法。

最後将fillStyle設定為LinearGradient對象執行填充變可繪制圖形了。

繪制徑向漸變

徑向漸變:沿着圓形的方向向外進行擴散漸變,比如沿着太陽半徑方向擴散出去的光暈。

createRediaGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

radiusStart與radiusStart分别代表開始圓的半徑與結束圓的半徑

徑向漸變

 繪制變形圖形

 我們有時會遇到這麼一個功能:旋轉相冊、放大照片,這裡就介紹如何變形圖形:

translate(x, y)用于移動坐标軸原點,預設在左上角

scale(x, y)用于将圖形放大,xy分别是各自坐标軸放大的倍數

rotate(angle)用于旋轉圖形,angle為角度值

平移擴大旋轉圖形

矩陣變換

變換矩陣:專門用來實作圖形變形,與坐标配合使用,達到變形的目的。

transform(m11, m12, m21, m22, dz, dy)方法可修改變換矩陣

該方法使用一個新的變換矩陣與目前變換矩陣進行乘法運算

m參數用以修改使用這個方法後,繪制圖形的計算方法,以達到變形的目的;

dx與dy分别表示将坐标原點在各自坐标上移動對應機關

PS:這塊我也看得模模糊糊的,據說需要掌握矩陣相關知識,我這裡簡述便是

這塊知識點,我沒有搞明白,暫時不描述了。

 圖形組合

 多個圖形之間可能發生重合。後出現的會遮蓋先出現的,有時我們想在上面做點操作,這裡變提供了一個globalCompositeOperation屬性決定圖形組合方式。

 該屬性文字很多,我這裡直接上測試代碼了:

圖形組合

繪制陰影

繪制陰影隻需設定以下屬性:

shadowOffsetX

shadowOffsetY

shadowColor

shadowBlur 陰影模糊範圍

我是一個陰影

使用圖像

繪制圖像有以下幾個方法:

drawImage(img, x, y)

drawImage(img, x, y, w, h)

drawImage(img, sx, sy, sw, sh, dz, dy, dw, dh)

前兩個函數都很好了解,第三個我第一眼是沒有看懂的:

sx\sy 分别代表源圖像被複制區域在畫布起始橫坐标縱坐标

sw\sh 表示被複制被複制區域的高寬(即做圖像局部複制)

dx\dy 表示被複制後的圖像在畫布上的位置

dw\dh 表示最後的高寬

第一個和第二個就是是否縮放的差距:

上一張我的果照

指定高寬與不指定的差別。

第三個函數的使用,局部放大或者剪切的效果,隻需要調整高寬縮放

局部剪切

圖像剪切

剛剛那個剪切還是水的,接下來才是真正的剪切。。。

圓形裁剪

像素處理

Canvas api可以擷取圖像的每一個像素,并得到像素的rgb,使用函數為:

getImageData(sx, sy, sw, sh)

簡單舉個例子吧:

View Code

繪制文字

繪制帶陰影的文字

儲存與恢複狀态

我們在圖像剪切時有個問題,如果操作結束還想繼續繪制,又不取消裁剪範圍的話,急需要用到狀态儲存與恢複了。

api提供save與restore完成相關功能

其分别用于儲存與恢複圖形上下文的繪圖狀态。

檔案儲存

 我們畫了很多圖形,但是該如何儲存呢?

儲存為本地檔案

我隻想說,你好黑啊。。。。

簡單的動畫制作

學到這裡,我突然開光了,我突然知道我最近在幹什麼了!!!

動畫制作,使用這個東西可以動畫制作,換句話說,做遊戲可以用它來了哇???如此一來我突然就感覺這個東西着實改變了前端啊!!!

所謂動畫就是不斷的檫除重繪的過程

移動的矩形

該矩形會由左至右的運動。。。。

結語

就個人來說,Canvas這章估計是HTML5中比較枯燥的東西了,我學習過程中就不太提得起勁,完了裡面很多圖形都是要有一定數學知識的。

然後這章的函數之多,完了我猜不要多久我又會忘記。

但是:這章類容應該是相當重要的,因為最後制作動畫時,我突然感覺是不是遊戲就是需要他呢???于是馬上去查了下資料:

分享29款基于 HTML5 Canvas 開發的網頁遊戲

于是老夫找到了此篇文章,才感覺到其真正用途,看來以後該知識點必須牢牢掌握好好運用啊!!!! 

本文轉自葉小钗部落格園部落格,原文連結:http://www.cnblogs.com/yexiaochai/archive/2013/04/19/3029603.html如需轉載請自行聯系原作者

繼續閱讀