2012-09-06 210 views
2

我想送RGB值的二維數組從值從getImageData()數據的方法數組PHP:生成二維數組值

for (var i=0;i<imgData.data.length;i+=4){ 

    // If you want to know the values of the pixel 
    var r = imgData.data[i + 0]; 
    var g = imgData.data[i + 1]; 
    var b = imgData.data[i + 2]; 
    var a = imgData.data[i + 3]; 

    //[...] do what you want with these values 
} 

由此看來,如何將我創建了一個整個畫布的RGB值的二維數組?

回答

4
var rgb = []; 
for (var i=0;i<imgData.data.length;i+=4){ 

    // If you want to know the values of the pixel 
    var r = imgData.data[i + 0]; 
    var g = imgData.data[i + 1]; 
    var b = imgData.data[i + 2]; 
    var a = imgData.data[i + 3]; 

    var x = Math.floor((i/4) % imageData.width); 
    var y = Math.floor((i/4)/imageData.width); 
    rgb[x] ? (rgb[x][y] = [r,b,g,a]) : (rgb[x] = [[r,b,g,a]]); 
} 
+0

快速提問:因爲我不認爲我需要Alpha值來做我正在做的事情,我應該放下「a」嗎? :) – Descartes

+0

是的,當然沒問題 – yngccc

+0

謝謝你的方式。 :) – Descartes

0

這可能不是你想要的,但如果你關注的是傳送圖像數據(不一定是建立在客戶端陣列),toDataURL()可能是一個傳輸圖像數據更簡單的方法..

HTML5 canvas.toDataURL('image/png')方法將產生一個data URI爲您的圖像數據 - 即一個非常長,文本編碼的PNG版本。不需要手動獲取圖像數據。同樣,如果可以的話,你可以使用JPEG編碼。

如果您發送此字符串到服務器,PHP可以把它當作第一個參數file_get_contents()(即$binary = file_get_contents($dataURL))解碼回二進制形式直接。然後,您可以將其保存到磁盤或使用二進制PNG數據執行任何您想要的操作,就像使用剛剛從磁盤加載的文件一樣。

+0

我知道toDataURL()。不幸的是 - 也許我應該在問題中提到這個問題 - 這個瀏覽器不支持該功能。 :-(但是謝謝。:) – Descartes