您将无法直接从另一台服务器将图像绘制到画布中,然后使用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脚本与一些ajax javascript一起使用,如下所示:
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脚本是公开的,并允许Internet潜在地恶意使用它。有上百万种方法可以解决此问题,最简单的方法之一就是某种形式的URL混淆...我认为安全的php做法值得单独使用google; P
edit-2:根据普遍的需求,我添加了一个检查以确保它是一个图像而不是一个php脚本(来自:PHP检查文件是否是一个图像)。