Você não poderá desenhar imagens diretamente de outro servidor em uma tela e usá-las getImageData
. É uma questão de segurança e a tela será considerada "contaminada".
Funcionaria para você salvar uma cópia da imagem no seu servidor usando PHP e depois carregar a nova imagem? Por exemplo, você pode enviar a URL para o script PHP e salvá-la em seu servidor e, em seguida, retornar o novo nome do arquivo para o seu javascript da seguinte maneira:
<?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;
?>
Você usaria o script PHP com algum 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;
}
}
Se você usar getImageData
a tela depois disso, ela funcionará bem.
Como alternativa, se você não quiser salvar a imagem inteira, poderá passar as coordenadas x e y para o script PHP e calcular o valor rgba do pixel nesse lado. Eu acho que existem boas bibliotecas para fazer esse tipo de processamento de imagem em PHP.
Se você quiser usar essa abordagem, entre em contato se precisar de ajuda para implementá-la.
edit-1: peeps apontou que o script php está exposto e permite que a Internet o utilize potencialmente maliciosamente. existem milhões de maneiras de lidar com isso, uma das mais simples sendo algum tipo de ofuscação de URL ... eu acho que as práticas seguras de php merecem um google separado;
edit-2: por demanda popular, adicionei uma verificação para garantir que seja uma imagem e não um script php (em: PHP verifique se o arquivo é uma imagem ).