绝对可以,你可以跨域从图像中获取rgba图像数据。
正如您所发现的,关键是必须将“其他”域配置为允许访问。该访问可以限制在几个指定的域(白帽访问),或者可以打开它以允许对任何匿名请求进行开放访问。这是一个关于如何在您的服务器上设置跨域访问的链接:http://enable-cors.org/
您还必须在客户端专门请求跨域共享。这是通过在 html Image 对象上设置 crossOrigin="anonymous" 属性来完成的。大多数浏览器(包括 IE9+)都支持跨域请求。
所以,是的……
如果服务器端配置正确且客户端请求正确...您将能够使用 context.getImageData 和 canvas.toDataURL 操作跨域图像。
以下示例代码成功地对图像进行了跨域请求(dropbox.com 已正确设置其服务器标头以允许匿名访问):
演示:http://jsfiddle.net/m1erickson/Xpy53/#base
// create a JS image object
var XDomainImage=new Image();
// ask the server for anonymous access to this image
XDomainImage.crossOrigin="anonymous";
// when the image is loaded...
XDomainImage.onload=function(){
canvas.width=XDomainImage.width;
canvas.height=XDomainImage.height;
ctx.drawImage(XDomainImage,0,0);
// use getImageData to grab the pixel data
var data=ctx.getImageData(50,35,1,1).data;
var red=data[0];
var green=data[1];
var blue=data[2];
alert("The image pixel at [50,30] is rgb("+red+","+green+","+blue+")");
}
// dropbox has properly set its headers to allow anonymous access
XDomainImage.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/colorhouse.png";
至于“一劳永逸”……这个问题经常被问到,以后还会再问。