javascript - 在 JavaScript 中从 img 中读取 EXIF 数据(跨域友好)

标签 javascript image canvas binary-data exif

我最近开始构建一个小书签,它可以显示网站上任何图像的 EXIF 数据。我选择使用 Nihilogic 的 binary.js and exif.js图书馆。对于与父页面位于同一域中的图像,该脚本效果非常好。但是因为它使用 XHR 来读取图像的二进制数据,并且因为 XHR 仅限于同源请求,所以我无法访问任何跨站点托管图像的二进制数据。

有没有办法在本地加载图像的二进制数据(或至少不使用 XHR)并保留 EXIF 数据?

我探索了其他几个方向,但我担心我对它们的理解不够深入,无法确定是否有解决方案:

  • JSONP - 我假设没有办法将二进制数据放入这些东西中。
  • canvas tags - 这些生成的 base64 编码似乎与 PHP 生成的编码非常不同,我怀疑新编码中不再存在 EXIF 数据。

最佳答案

允许 Javascript 对同源图像和启用 cors 的图像执行特殊操作(如在 Canvas 上),因为浏览器可以安全地假设这些图像可以首先上传到服务器。但随后它变得复杂...

I can't access the binary data of any cross-site-hosted images.

是的,通常来说,您不能这样做非常重要。更重要的是,您不能用小书签做您想做的事。

你不能用 Canvas 做到这一点,因为这里的 cors 规则很严格 (for good reasons!)

简而言之,一般的推理几乎完全相同。浏览器处于独特的安全位置:互联网上的随机页面可以向您显示您的隐私信息,例如假设图像 C:\MyPhotos\privateImage1.jpg,假设它可以猜出该文件路径。

但是除了向您展示之外,该网页绝对不允许对该文件进行任何操作。它无法读取二进制信息(EXIF 信息或像素信息)。不允许 JavaScript 知道该图像的外观或几乎任何与其关联的数据。

如果它能够解决这个问题,一个随机网页将能够尝试一堆文件路径,并且可能会在您的硬盘驱动器上遇到一个图像,然后将该图像的二进制数据上传到服务器,在影响窃取您的私有(private)图像。


因此,浏览器扩展比 (JavaScript) 小书签更适合这项任务。

关于javascript - 在 JavaScript 中从 img 中读取 EXIF 数据(跨域友好),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10034886/

相关文章:

javascript - Knockout JS - 通过自定义脚本更新ViewModel数据

python - 在pygame中获取图像单个像素的颜色

javascript - jQuery 图像交叉淡入淡出不起作用

javascript - 在javascript中在 Canvas 中生成随机图像

javascript - 根据它们之间的距离绘制 4 个点?

javascript - Canvas 保存和恢复

javascript - 如何使用字段名称创建 JSON 字符串

javascript - 使用 cookie 更改背景图像

javascript - 使用 HTML5 的多个线性视频

android - Android 上的 NV21 转位图,图像非常暗、灰度还是黄色?