0
ウェブページに表示された画像をループして、どれが左上のピクセルが白かを判断しようとしています。ウェブページから白い背景を持つ画像を特定する
$('img').each(function(){
// create an image object using the current image SRC
var image = new Image();
image.crossOrigin = "Anonymous";
image.src = $(this).attr('src');
//create a canvas and place the image inside the canvas element
var canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext('2d').drawImage(image, 0, 0, image.width, image.height);
//grab pixel data
var pixel = canvas.getContext('2d').getImageData(0, 0, 1, 1).data;
$(this).attr('data-pixel', pixel);
//remove canvas
$('canvas').remove();
});
問題は、これは今のところ常に問題になっています。私はそれを単一のイメージ上で走らせるとほとんどの場合動作します。しかし、すべての画像を見ると、data-pixel="0,0,0,0"></img>
が得られます。
私に何か不足していますか?これまでにこの方法を試したことはありませんでした。別のバージョンが分かっている場合は、教えてください。 I上記のコメントに基づいて
1)適切なCORSヘッダーですべての外部イメージが送信されていますか? 2) 'getImageData()。data'は常に(r、g、b、aの)配列を返します。したがって、 'data-pixel'属性に配列を代入しています。あなたはそれについて確かですか? – devnull69
はい、あなたはいくつか欠けています:devnull69が正しく述べたように、あなたのイメージが適切なCORSヘッダーで提供されない場合、イメージは読み込まれません。しかし、#1の問題を修正すればおそらく気づいただろう。画像の読み込みは、キャッシュされていても、非同期であっても、どこからでも、いつでも非同期である。だからあなたが 'drawImage'を呼び出す時に、イメージはまだロードされておらず、あなたのキャンバスには何も描画されません(' 0,0,0,0'は透明ピクセルであり、白いピクセルではありません '[255,255,255 、255])。もちろん、画像がロードされたときにのみ、他のすべてを呼び出す必要があります。 – Kaiido
イメージは実行時にロードされます。私はコンソールを介してそれをロードし、私はヒットし、逃す。ときどき私には正しい値が与えられ、それ以外のときは単に0,0,0,0がすべてに追加されます。これは私の問題です。 –