JS - 检测来自其他域的图像亮度

时间:2017-04-01 23:46:12

标签: javascript image

我在文档中加载了<img src="https://www.someotherdomain.com/myimg.jpg">的图像,我想用JS来确定&#34; bright&#34;平均而言,图像是(调整叠加元素的颜色以提高可见度。

答案在这里:Image Dark/Light Detection Client Sided Script效果很好......除了它不是这样的事实我需要确定亮度的图像可以来自任何域,我无法控制在服务器上设置必要的CORS头以及响应以使其成为可能。 JS很容易使用图像。

有没有办法从外部域获取图像的亮度而不必担心CORS?

1 个答案:

答案 0 :(得分:0)

不直接:未通过CORS加载的跨域图像(具有crossorigin属性)被认为是&#34; tainted&#34;,并且它被绘制的任何地方(例如在画布上)都将也变得污秽了。您无法从受污染的画布中读取图像数据,这就是链接答案(使用getImageData读取图像数据)中描述的方法无法工作的原因。 MDN has some more information on tainted images

这背后的原因与任何其他受CORS限制的资源相同:在没有明确许可的情况下(通过使用CORS头),您不应该能够从其他域获取信息,因为远程域可能永远不会打算让其他域访问这些图像。

例如,图像共享服务只允许登录用户访问私有图像;如果此限制不存在,任何具有此类图像的URL的网站都可以作为登录用户请求该图像,然后读取图像,上传并在自己的网站上发布,这肯定是隐私问题。

您可以使用CORS代理解决此问题,该代理通过自动添加CORS标头的服务器路由您的请求。您可以使用公共服务,例如crossorigin.me(您只需在网址前添加https://crossorigin.me/),或者如果您不安全地通过未知的第三方发送请求,则可以运行自己的CORS代理