>我最近开始构建一个书签,显示网站上任何图像的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脚本怎么样?此功能适用于远程和图像。