Vous ne pourrez pas dessiner des images directement à partir d'un autre serveur dans un canevas, puis les utiliser getImageData
. C'est un problème de sécurité et la toile sera considérée comme "corrompue".
Cela fonctionnerait-il pour vous d'enregistrer une copie de l'image sur votre serveur en utilisant PHP, puis de charger simplement la nouvelle image? Par exemple, vous pouvez envoyer l'URL vers le script PHP et l'enregistrer sur votre serveur, puis renvoyer le nouveau nom de fichier à votre javascript comme ceci:
<?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;
?>
Vous utiliseriez le script PHP avec du javascript ajax comme celui-ci:
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 vous utilisez getImageData
sur la toile après cela, cela fonctionnera bien.
Alternativement, si vous ne voulez pas enregistrer l'image entière, vous pouvez passer les coordonnées x & y à votre script PHP et calculer la valeur rgba du pixel de ce côté. Je pense qu'il existe de bonnes bibliothèques pour faire ce genre de traitement d'image en PHP.
Si vous souhaitez utiliser cette approche, faites-moi savoir si vous avez besoin d'aide pour la mettre en œuvre.
edit-1: peeps a souligné que le script php est exposé et permet à Internet de l'utiliser potentiellement de manière malveillante. il existe un million de façons de gérer cela, l'une des plus simples étant une sorte d'obfuscation d'URL ... Je pense que les pratiques php sécurisées méritent un google séparé; P
edit-2: à la demande générale, j'ai ajouté une vérification pour m'assurer qu'il s'agit d'une image et non d'un script php (à partir de: PHP vérifier si le fichier est une image ).