Sie können keine Bilder direkt von einem anderen Server in eine Zeichenfläche zeichnen und dann verwenden getImageData
. Es ist ein Sicherheitsproblem und die Leinwand wird als "verdorben" betrachtet.
Würde es für Sie funktionieren, eine Kopie des Images mit PHP auf Ihrem Server zu speichern und dann einfach das neue Image zu laden? Sie können beispielsweise die URL an das PHP-Skript senden und auf Ihrem Server speichern und dann den neuen Dateinamen wie folgt an Ihr Javascript zurückgeben:
<?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;
?>
Sie würden das PHP-Skript mit einem Ajax-Javascript wie dem folgenden verwenden:
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;
}
}
Wenn Sie danach getImageData
auf der Leinwand verwenden, funktioniert es einwandfrei.
Wenn Sie nicht das gesamte Bild speichern möchten, können Sie alternativ x & y-Koordinaten an Ihr PHP-Skript übergeben und den rgba-Wert des Pixels auf dieser Seite berechnen. Ich denke, es gibt gute Bibliotheken für diese Art der Bildverarbeitung in PHP.
Wenn Sie diesen Ansatz verwenden möchten, lassen Sie mich wissen, wenn Sie Hilfe bei der Implementierung benötigen.
edit-1: Peeps wiesen darauf hin, dass das PHP-Skript verfügbar ist und das Internet es möglicherweise böswillig verwenden kann. Es gibt eine Million Möglichkeiten, damit umzugehen. Eine der einfachsten ist eine Art URL-Verschleierung. Ich denke, sichere PHP-Praktiken verdienen ein separates Google; P.
edit-2: Auf vielfachen Wunsch habe ich eine Prüfung hinzugefügt, um sicherzustellen, dass es sich um ein Bild und nicht um ein PHP-Skript handelt (von: PHP-Prüfung, ob die Datei ein Bild ist ).