No podrá dibujar imágenes directamente desde otro servidor en un lienzo y luego usarlas getImageData
. Es un problema de seguridad y el lienzo se considerará "contaminado".
¿Funcionaría para usted guardar una copia de la imagen en su servidor usando PHP y luego simplemente cargar la nueva imagen? Por ejemplo, podría enviar la URL al script PHP y guardarla en su servidor, luego devolver el nuevo nombre de archivo a su javascript de esta manera:
<?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;
?>
Usaría el script PHP con algunos javascript ajax como este:
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;
}
}
Si lo usa getImageData
en el lienzo después de eso, funcionará bien.
Alternativamente, si no desea guardar la imagen completa, puede pasar las coordenadas x & y a su script PHP y calcular el valor rgba del píxel en ese lado. Creo que hay buenas bibliotecas para hacer ese tipo de procesamiento de imágenes en PHP.
Si desea utilizar este enfoque, avíseme si necesita ayuda para implementarlo.
edit-1: peeps señaló que el script php está expuesto y permite que internet lo use potencialmente de manera maliciosa. hay un millón de formas de manejar esto, una de las más simples es algún tipo de ofuscación de URL ... creo que las prácticas seguras de php merecen un google por separado; P
edit-2: por demanda popular, he agregado una verificación para asegurarme de que sea una imagen y no un script php (de: PHP verifica si el archivo es una imagen ).