从JPG文件中读取EXIF数据

5
我需要分析数千个jpeg文件(通过检索其EXIF数据)。这超过了50GB的数据。我无法读取整个文件,因为这会花费太多时间。
在C#中有没有一种方法可以只从这些文件中读取EXIF数据,而不需要加载和解压缩整个jpeg文件?
编辑:为什么我需要快速的方法? 我已经尝试了这个问题的解决方案:如何使用C#从文件获取EXIF数据。 对于1000张总大小约为1GB的图片进行分析需要3分钟。所以对于更大(50G)的照片库,可能需要2小时。而当您几乎需要立即得到信息时,比如:“您的客户使用的首选缩放是什么”,它就太慢了。
4个回答

8

2
我最近将我的Java metadata-extractor 库移植到了.NET平台。该库自2002年以来一直活跃,并经过广泛使用的严格测试。在我的测试中,它可以在大约4秒钟内处理2GB的图像并提取其中的所有元数据。您可以通过告诉它只读取特定类型的元数据(例如Exif)来进一步优化它。它支持多种图像/视频格式和许多元数据类型。

可在GitHubNuGet上获取。


1

GdPicture.NET Imaging SDK 从版本10开始提供了一种新的图像解析机制,允许直接访问图像元数据(EXIF、GPS、XMP、IPTC...)而无需解码像素。它支持超过90种图像格式,包括JPEG、TIFF、RAW和WebP。

这里有一个链接到GdPicture.NET知识库,展示了如何使用C#和VB.NET(也支持许多其他语言)提取元数据的方法:tutorial

如果有人需要进一步的信息,我很乐意提供帮助。

免责声明:我是GdPicture.NET的产品架构师。


0

你不需要解压任何东西,Exif信息保存在图像之前的头部,所以你只需要打开文件,读取exif头并解码你需要的内容。

如果你手动读取exif数据(这并不难),那么你所需要的尺寸就在最前面。

编辑:请注意,exif数据实际上不一定要在最前面,但它几乎总是在最前面,因此可以安全地假设通常情况下比没有更快。

另外,你有检查使用标准API是否“太慢”吗?我认为对于50G来说,使用标准API不会花费太长时间(或者如果用其他方式做必然更快)。


这可能并不难...但实际的编码方法似乎被保密了。如果有人知道如何直接读取EXIF信息而不使用库,我想知道。例如,我可以看到制造商、型号和日期以纯文本形式存储...但是在十六进制转储中,我找不到标记它们位置的标签。 - Mark T
Exif格式非常完整地记录了所有内容,除了一些特定的专有标签。显然这个评论是7年前的,所以我这里没有任何东西,但如果你从维基百科的exif条目开始,它会给出链接到exif网站的文档。它是一种标签形式,与tiff结构相同。如果需要,我有通用代码可以提取标签,但无法在评论中添加。 - Woody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接