Non sarai in grado di disegnare le immagini direttamente da un altro server in un'area di disegno e quindi utilizzarle getImageData
. È un problema di sicurezza e la tela sarà considerata "contaminata".
Funzionerebbe per te salvare una copia dell'immagine sul tuo server usando PHP e quindi caricare la nuova immagine? Ad esempio, potresti inviare l'URL allo script PHP e salvarlo sul tuo server, quindi restituire il nuovo nome file al tuo javascript in questo modo:
<?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;
?>
Utilizzeresti lo script PHP con alcuni javascript ajax come questo:
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;
}
}
Se lo usi getImageData
sulla tela dopo, funzionerà benissimo.
In alternativa, se non si desidera salvare l'intera immagine, è possibile passare le coordinate x & y allo script PHP e calcolare il valore rgba del pixel su quel lato. Penso che ci siano buone librerie per fare quel tipo di elaborazione delle immagini in PHP.
Se vuoi usare questo approccio, fammi sapere se hai bisogno di aiuto per implementarlo.
edit-1: peeps ha sottolineato che lo script php è esposto e consente a Internet di utilizzarlo potenzialmente in modo dannoso. ci sono milioni di modi per gestirlo, uno dei più semplici è una sorta di offuscamento dell'URL ... credo che le pratiche di php sicure meritino un google separato; P
edit-2: a grande richiesta, ho aggiunto un segno di spunta per assicurarmi che sia un'immagine e non uno script php (da: controllo PHP se il file è un'immagine ).