學習canvas,javascript的小伙伴,可以跟着我這篇文章的思路一起做一個小效果出來,代碼都齊全了。
首先看一下源圖和轉換成粒子效果的對比圖:
左側圖片為源圖,右側圖片為粒子效果圖。該效果是在Canvas畫布上制作的。將圖片制作成粒子效果相對而言是比較簡單的。重點了解兩個知識點即可
1:圖片是通過image對象形式繪制在畫布上的,然后使用Canvas的getImageData接口,獲取圖像的像素信息。
var imageData=ctx.getImageData(x, y, width, height);
參數說明:x,y為畫布上的x和y坐標
width,height為獲取指定區域圖像的信息
返回值說明:imageData為返回值,它是一個對象,包含三個屬性
2:了解像素區域數據的排布說明,以上獲取的圖片數據像素信息(imageData對象中的data屬性)為RGBA整型的一維數組數據。一個像素是有4個值(R,G,B,A)組成的。也就是說,數組信息每四個為一個像素點。因此,有以下規則,
第一個像素信息為:RGBA(data[0],data[1],data[2],data[3])
第二個像素信息為:RGBA(data[4],data[5],data[6],data[7])
.....
第N個像素信息為: RGBA(data[(n-1)*4],data[(n-1)*4+1],data[(n-1)*4+2],data[(n-1)*4+3])
.....
另外,像素區域既然是一個區域,它是有寬和高的。上面的推算公式適合單獨一行使用定位一個像素點。所以計算像素點時要考慮到在整個圖像區域內定位:
以上圖為例。圖像的寬和高都為200,如果按照每一個像素為一行一列時。則該圖像共有200行,200列。所以要取得 i 行第 j 列的像素初始位置信息為:
var pos =[( i-1 )*200]+( j-1 )]*4;
其中,公式中的 i 表示行數,j 表示列數。200為圖像的寬度。
demo代碼:
上面如果不理解, 對照代碼運行一下試試理解吧:
這次沒能為粒子加上炫酷的動態效果~~下次補上,找一些算法就可以粒子動起來的,有興趣可以做做看~
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助
整個效果的功能都完成了
如果大家想學習canvas,JavaScript,可以加群: 640633433群里面有每天都會上傳視頻供大家學習,歡迎學習交流的小伙伴過來一起學習交流!
寫在最后:
很多人都知道我是學全棧的,都天真的以為我有全套的前端、網頁制作等視頻學習資料。我想說你們是對的,我的確有前端的全套視頻資料。
如果想看到更加系統的文章和學習方法經驗可以關注我的微信公眾號:‘web前端EDU’關注后回復可以領取一套完整的學習視頻!