別のサーバーからキャンバスに直接画像を描画して、を使用することはできませんgetImageData
。これはセキュリティの問題であり、キャンバスは「汚染されている」と見なされます。
PHPを使用してイメージのコピーをサーバーに保存し、新しいイメージをロードするだけでうまくいきますか?たとえば、URLをPHPスクリプトに送信してサーバーに保存し、次のように新しいファイル名をJavaScriptに返すことができます。
<?php //The name of this file in this example is imgdata.php
$url=$_GET['url'];
// prevent hackers from uploading PHP scripts and pwning your system
if(!@is_array(getimagesize($url))){
echo "path/to/placeholderImage.png";
exit("wrong file type.");
}
$img = file_get_contents($url);
$fn = substr(strrchr($url, "/"), 1);
file_put_contents($fn,$img);
echo $fn;
?>
次のようなajax javascriptでPHPスクリプトを使用します。
xi=new XMLHttpRequest();
xi.open("GET","imgdata.php?url="+yourImageURL,true);
xi.send();
xi.onreadystatechange=function() {
if(xi.readyState==4 && xi.status==200) {
img=new Image;
img.onload=function(){
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}
img.src=xi.responseText;
}
}
getImageData
その後キャンバスで使用すると、問題なく動作します。
または、画像全体を保存したくない場合は、xおよびy座標をPHPスクリプトに渡して、その側でピクセルのrgba値を計算できます。PHPでそのような画像処理を行うための優れたライブラリーがあると思います。
このアプローチを使用したい場合は、実装のサポートが必要かどうかをお知らせください。
edit-1:phpスクリプトが公開されており、インターネットが悪意を持って使用する可能性があることを指摘しました。これを処理するには100万通りの方法がありますが、最も簡単な方法の1つは、ある種のURLの難読化です...安全なphpの実践は、別のgoogleに値すると思います; P
edit-2:よくある要望により、phpスクリプトではなく画像であることを確認するためのチェックを追加しました(from:PHP check fileが画像かどうか)。