2011-01-22 21 views
2

PHPで私はJavascriptに転送したい画像のピクセルデータを取得しました。ArrayをCanvasPixelArrayに変換する方法またはCanvasPixelArrayオブジェクトを作成する方法はありますか?

私の唯一の問題は、PHPがJavascript Arrayで変換した文字列を返し、ImageData.dataが配列ではなくCanvasPixelArrayであることです。

var cvsPixelAr = [arStrFromPHP]; 
var imgData = ctx.createImageData(dim[0], dim[1]); 
imgData.data = cvsPixelAr; 

「新しいCanvasPixelArray();」も試しましたが、まだ何もありません。

誰かが回避策を知っていますか? そうでない場合は、ウェブワーカーを使用してすべての単一の値を変更します: - /。私はあなたが最終的なデータ配列に区分以上のアイテムをコピーする必要があります信じて

おかげ

答えて

0

:私にとって

var imgData = ctx.createImageData(dim[0], dim[1]); 
var d = imgData.data; 
for (var i=0,len=d.length;i<len;++i) d[i] = cvsPixelAr[i]; 
+0

おかげで、私の構文を維持するために:

は、ここで私はちょうど生のピクセルデータを使用して、DOM APIなしで画像のサイズを変更するためにこれを使用する例を示します。 それは私がやったことですが、私はループを避けたいと思いました。 – kadiks

+0

AFAIK、ループを回避することはできません。 Imはここで推測しますが、ImageData.dataとして返されるものはおそらく使用されるJSエンジンによって異なりますが、最も重要なのはImageData.dataは内部型であるため、そのコンストラクターにplain 'JSを介してアクセスできません。それはreduceRight()のピクセルからの楽しみを吸う! – Quickredfox

+0

あなたのPHPを使ってJSを生成しているので、おそらくいくつかの[展開されていないループ](http://en.wikipedia.org/wiki/Loop_unwinding)を生成して最適化することができます – Quickredfox

0

が、これは非常によく働いた:

ctx.putImageData(
    new ImageData(someUintArray, width, height), 
    0,0 
); 

ドン」をこの式を適用する必要があることを忘れてください:

someUintArray.length == width*height*4 

配列全体をコピーする必要はありません。チェックMDN docs on this topicを確認してください。 https://jsfiddle.net/n3drn8v9/4/

関連する問題