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

Read EXIF data from img in JavaScript (cross-domain friendly)

本文关键字:数据 中从 JavaScript img 读取 EXIF      更新时间:2023-09-26

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

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

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

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

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

我无法访问任何跨站点托管图像的二进制数据。

是的,一般来说,你不能是非常重要的。更重要的是,你不能用书签做你想做的事。

你不能用画布做到这一点,因为这里的cors规则是严格的(有充分的理由!

简而言之,总体推理几乎完全相同。浏览器处于独特的安全地位:互联网上的随机页面可以向您显示对您来说是私有的内容,例如假设的图像C:''MyPhotos''privateImage1.jpg,假设它可以猜测该文件路径。

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

如果它能够弄清楚这一点,一个随机网页将能够尝试一堆文件路径,并可能在硬盘驱动器上遇到一个图像,然后将该图像的二进制数据上传到服务器,实际上窃取了您的私有图像。


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

纯粹来自客户?我怀疑。XHRing一个运行类似exif_imagetype()的本地PHP脚本怎么样?此功能适用于远程和图像。