Nie będzie można rysować obrazów bezpośrednio z innego serwera na kanwie, a następnie używać getImageData
. Jest to kwestia bezpieczeństwa, a płótno zostanie uznane za „skażone”.
Czy zadziałałoby, gdybyś zapisał kopię obrazu na serwerze za pomocą PHP, a następnie po prostu załadował nowy obraz? Na przykład możesz wysłać adres URL do skryptu PHP i zapisać go na swoim serwerze, a następnie zwrócić nową nazwę pliku do swojego javascript w następujący sposób:
<?php
$url=$_GET['url'];
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;
?>
Używałbyś skryptu PHP z jakimś javascriptem Ajax w następujący sposób:
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;
}
}
Jeśli getImageData
później użyjesz na płótnie, będzie działać dobrze.
Alternatywnie, jeśli nie chcesz zapisywać całego obrazu, możesz przekazać współrzędne x & y do swojego skryptu PHP i obliczyć wartość rgba piksela po tej stronie. Myślę, że są dobre biblioteki do tego rodzaju przetwarzania obrazu w PHP.
Jeśli chcesz skorzystać z tego podejścia, daj mi znać, jeśli potrzebujesz pomocy w jego wdrożeniu.
edit-1: peeps wskazał, że skrypt php jest ujawniony i umożliwia internetowi potencjalnie złośliwe wykorzystanie go. istnieje milion sposobów, aby sobie z tym poradzić, jednym z najprostszych jest zaciemnianie adresów URL ... uważam, że bezpieczne praktyki php zasługują na osobne Google; P
edit-2: na popularne żądanie dodałem sprawdzenie, czy jest to obraz, a nie skrypt php (z: PHP sprawdź, czy plik jest obrazem ).