點選上面這張圖片就可以看到效果~
這是今天練習的一個特殊效果,
利用 html5 對於圖片上每一點像素的處理,
將彩色的圖片轉換成黑白的圖片,
其中用到的程式其實不難,
難是難在將圖片上每個像素轉換為矩陣的觀念與原理~
這個網站對於圖片像素轉換有相當詳細的介紹
而我再進行彩色轉黑白之前
也實際上繪製了一個 2x2 並帶有四個顏色的小圖做為前置作業的練習
圖片彩色轉黑白最重要的就是利用了 html5 裡頭
getImageData、imageData、putImageData 這三個指令
而 imageData 就是表現圖片每個像素在陣列中的長相(RGBA)
因此要轉成黑白最重要的觀念
就是 RGB 三色的數值必須相同,才可以讓彩色變成黑白
再利用 for 迴圈的方式,讀取圖片中每一個像素的數值
乘上一些數字(經驗法則得出來的數值)
就會成為每一個像素所對應的灰階數值
如此一來當迴圈將每個像素都處理完畢
彩色圖片就會變成灰階的圖片了~
但這邊有一個在練習的時候相當要注意的地方
就是利用 html5 讀取圖片的模式
如果沒有經過 IIS 的頁面或是圖片
以及是從外部載入的非同一個伺服器下的圖片
瀏覽器本身會有保護的機制而無法正常運作轉換
javascript 會出現以下兩個錯誤訊息:
Unable to get image data from canvas because the canvas has been tainted by cross-origin data.
Uncaught Error: SECURITY_ERR: DOM Exception 18
是以後練習要注意的地方
而我再進行彩色轉黑白之前
也實際上繪製了一個 2x2 並帶有四個顏色的小圖做為前置作業的練習
圖片彩色轉黑白最重要的就是利用了 html5 裡頭
getImageData、imageData、putImageData 這三個指令
而 imageData 就是表現圖片每個像素在陣列中的長相(RGBA)
因此要轉成黑白最重要的觀念
就是 RGB 三色的數值必須相同,才可以讓彩色變成黑白
再利用 for 迴圈的方式,讀取圖片中每一個像素的數值
乘上一些數字(經驗法則得出來的數值)
就會成為每一個像素所對應的灰階數值
如此一來當迴圈將每個像素都處理完畢
彩色圖片就會變成灰階的圖片了~
但這邊有一個在練習的時候相當要注意的地方
就是利用 html5 讀取圖片的模式
如果沒有經過 IIS 的頁面或是圖片
以及是從外部載入的非同一個伺服器下的圖片
瀏覽器本身會有保護的機制而無法正常運作轉換
javascript 會出現以下兩個錯誤訊息:
Unable to get image data from canvas because the canvas has been tainted by cross-origin data.
Uncaught Error: SECURITY_ERR: DOM Exception 18
是以後練習要注意的地方
var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); var pic = new Image(); pic.src="img/20120529_color.jpg"; pic.addEventListener("load",eventShipLoaded,false); function eventShipLoaded(){ imagecolor(); } function imagecolor(){ context.drawImage(pic,0,0); var imageData = context.getImageData(0,0,329,202); var data = imageData.data; for (var i = 0; i < data.length; i += 4) { var brightness = 0.4 * data[i] + 0.5 * data[i + 1] + 0.2 * data[i + 2]; data[i] = brightness; //red data[i + 1] = brightness; //green data[i + 2] = brightness; //blue data[i + 3] = 255; //alpha } context.putImageData(imageData, 0, 0); }
沒有留言:
張貼留言