5

我需要分析数千个 jpeg 文件(通过检索 EXIF 数据)。这是超过 50 GB 的数据。我无法读取整个文件,因为它会花费太多时间。

C# 中是否有任何方法可以仅从这些文件中读取 EXIF 数据,而无需加载和解压缩整个 jpeg 文件?

编辑:为什么我需要快速方法?
我已经尝试了这个问题的解决方案:How to get the EXIF data from a file using C#
And for 1000 images with total size ~ 1GB it takes 3 minutes to analyze. 因此,对于更大 (50G) 的照片库,可能需要 2 个小时。当您需要几乎即时的信息时,例如:“您的客户首选使用什么缩放”,它太慢了。

4

4 回答 4

8

您将在ExifLib - A Fast Exif Data Extractor for .NET 2.0+(以及一个完整项目)中找到一些代码示例,展示了如何读取获取 EXIF 信息所需的最少数据。

于 2012-05-08T08:04:49.403 回答
2

我最近将我的 Java元数据提取器库移植到 .NET。它自 2002 年以来一直很活跃,并通过广泛使用进行了大量测试。在我的测试中,它翻阅了 2GB 的图像,在我的机器上大约 4 秒内提取了所有元数据。您可以通过告诉它只读取特定类型的元数据(例如 Exif)来进一步优化。它支持许多图像/视频格式和许多元数据类型。

GitHubNuGet上可用。

于 2016-01-03T13:26:32.920 回答
1

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

这是 GdPicture.NET 知识库的链接,该知识库演示了如何使用 C# 和 VB.NET(也支持许多其他语言)提取元数据:教程

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

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

于 2013-10-01T12:35:40.760 回答
0

您不需要解压缩任何东西,Exif 信息保存在图像之前的标头中,因此您需要做的就是打开文件,读取 exif 标头并解码您需要的任何内容。这是如果您手动读取 exif 数据(这并不难)。

如果您只需要尺寸,那就在前面

编辑:请注意 exif 数据实际上不必在前面,但它几乎总是在前面,因此可以安全地假设它通常会比不是在前面要快得多。

另外,您是否检查过使用标准 API 是否“太慢”?我不会想到 50G 需要那么长时间(或者如果以不同的方式进行操作必然会更快)。

于 2012-05-08T08:03:16.347 回答