您将无法直接从另一台服务器将图像绘制到画布中,然后使用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;
?>
您将使用带有一些 ajax javascript 的 PHP 脚本,如下所示:
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 中进行这种图像处理。
如果您想使用这种方法,请告诉我您是否需要帮助实现它。
编辑 1:peeps 指出 php 脚本已暴露并允许互联网潜在地恶意使用它。有一百万种方法可以解决这个问题,最简单的方法之一是某种 URL 混淆......我认为安全的 php 实践值得单独的谷歌;P
编辑 2:根据大众需求,我添加了一个检查以确保它是图像而不是 php 脚本(来自:PHP 检查文件是否为图像)。