Вы не сможете рисовать изображения прямо с другого сервера на холсте, а затем использовать getImageData
. Это проблема безопасности, и холст будет считаться "испорченным".
Сработает ли для вас сохранить копию изображения на сервере с помощью PHP, а затем просто загрузить новое изображение? Например, вы можете отправить URL-адрес сценария PHP и сохранить его на своем сервере, а затем вернуть новое имя файла в свой javascript следующим образом:
<?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;
?>
Вы бы использовали сценарий PHP с некоторым javascript ajax следующим образом:
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;
}
}
Если после этого использовать getImageData
на холсте, все будет нормально.
В качестве альтернативы, если вы не хотите сохранять все изображение, вы можете передать координаты x и y в свой PHP-скрипт и вычислить значение rgba пикселя на этой стороне. Я думаю, что есть хорошие библиотеки для такой обработки изображений в PHP.
Если вы хотите использовать этот подход, дайте мне знать, если вам понадобится помощь в его реализации.
edit-1: peeps указали, что скрипт php открыт и позволяет Интернету потенциально использовать его злонамеренно. есть миллион способов справиться с этим, один из самых простых - это своего рода обфускация URL ... я считаю, что безопасные методы php заслуживают отдельного Google; P
edit-2: по многочисленным просьбам я добавил проверку, чтобы убедиться, что это изображение, а не сценарий php (от: Проверка PHP, является ли файл изображением ).