我有以下任务:
- 提供
<input type=file />
- 当用户添加文件时:
- 读取EXIF数据(特别是位置信息,如果可用)
- 使用 AJAX 将文件和信息从EXIF发送到外部API
因此,我希望在将文件添加到input
时使用JavaScript提取一些EXIF数据。
这可能吗?
我知道这个问题:Can I read Exif data of a picture in the client-side with js?,它指的是http://blog.nihilogic.dk/2008/05/reading-exif-data-with-javascript.html
但我的问题是(我认为?)略有不同-我希望在映像位于我的域之前提取EXIF数据,而此时它位于用户的本地文件系统中,如果您明白我的意思。我可以访问二进制数据,那么我也可以获得EXIF吗?
谢谢你的建议。
6条答案
按热度按时间cygmwpex1#
你可以在HTML5的客户端上这样做。你应该有一个适当的基于服务器的回退,为旧的浏览器,不支持文件和FileReader。
你可以编写自己的exif解析器,或者使用jsjpegmeta library(Ben Leslie),这是一个简单而又令人敬畏的库,可以让浏览器从大多数jpeg文件中提取EXIF数据。有a patch说它修复了大多数兼容性问题。我还没有测试这个补丁,但是准备好分叉这个项目,戴上你的github帽子。
要获取EXIF:
1.**打开文件对话框:**我通常创建一个按钮,用于调用函数来生成
<file
输入并添加更改处理程序1.**获取文件:**在文件更改处理程序ue
$(this).get(0).files
中获取所选文件的列表。1.**解析exif数据:**将浏览结果发送到jsjpegmeta
我不得不稍微调整库以使它做我想做的事情(我想要一个commonJS库)我也做了在问题1中确定的调整。
Here is a fiddle
更新日期26.07.2022该软件包已移至Gitlab。补丁包含在最新版本中。您可以找到软件包here。
qv7cva1a2#
我知道这个问题可能已经解决了,但我想提供一个替代的解决方案,为人们绊倒在这个问题上。
现在有一个新的库exifr,你可以用它来做这件事,它是一个经过维护的、积极开发的库,专注于性能,在nodejs和浏览器中都能工作。
从一个文件中提取exif的简单示例:
从多个文件中提取exif的复杂示例:
你甚至可以提取嵌入在文件中的缩略图:
您还可以试用库的playground并试验图像及其输出,或者查看repository and docs。
zbwhf8kr3#
是与现代浏览器,你可以读取文件内容,所以提取exif.你显示的链接是一个例子.问题是,在旧的浏览器IE6-9,FF 3.6-这是不可能的.你也应该考虑到这是一个艰难的过程,浏览器读取和提取exif从大文件.
ozxc1zmp4#
我刚从npm找到了exif-js。
https://github.com/exif-js/exif-js
我在react里这么做。这是我的代码。它对我来说非常有效
结果应该是这样的。
rkttyhzu5#
Shanimal's answer是正确的,但是它使事情过于复杂。如果你不需要支持多个文件上传,下面是jsjpegmeta库的一个实现,它可以完成同样的事情:
ssm49v7z6#
不,JavaScript不能直接到达EXIF;这不是一个安全问题,只是浏览器无法将其提供给DOM。
最接近你得到的正是另一个问题提到的黑客:在服务器端有一个进程来分析图像并通过 AJAX 〉返回EXIF数据。