如何使用 C# 从文件中获取 EXIF 数据
我想用 C# 编写一个小程序,它可以浏览我的 jpeg 照片,例如,将它们分类到带日期的文件夹中(使用我的约会约定,该死......)。
有谁知道以编程方式获取 EXIF 数据(例如日期和时间或曝光)的相对简单的方法吗? 谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
正如建议的那样,您可以使用一些第三方库,或者手动完成(这不是很多工作),但最简单和最灵活的可能是使用 .NET 中的内置功能。 有关详细信息,请参阅:
System.Drawing.Image。 PropertyItems 属性
系统.Drawing.Imaging.PropertyItem 类
如何:读取图像元数据
我说“它是最灵活的”,因为.NET 不会尝试以任何方式解释或合并数据。 对于每个 EXIF,您基本上都会得到一个字节数组。 这可能是好是坏,具体取决于您实际想要的控制程度。
另外,我应该指出,属性列表实际上并不直接对应于 EXIF 值。 EXIF 本身存储在具有重叠 ID 的多个表中,但 .NET 将所有内容放入一个列表中,并重新定义某些项目的 ID。 但只要您不关心精确的 EXIF ID,您就应该可以使用 .NET 映射。
编辑:可以在不加载以下答案后的完整图像的情况下完成此操作:https://stackoverflow.com /a/552642/2097240
As suggested, you can use some 3rd party library, or do it manually (which is not that much work), but the simplest and the most flexible is to perhaps use the built-in functionality in .NET. For more see:
System.Drawing.Image.PropertyItems Property
System.Drawing.Imaging.PropertyItem Class
How to: Read Image Metadata
I say "it’s the most flexible" because .NET does not try to interpret or coalesce the data in any way. For each EXIF you basically get an array of bytes. This may be good or bad depending on how much control you actually want.
Also, I should point out that the property list does not in fact directly correspond to the EXIF values. EXIF itself is stored in multiple tables with overlapping ID’s, but .NET puts everything in one list and redefines ID’s of some items. But as long as you don’t care about the precise EXIF ID’s, you should be fine with the .NET mapping.
Edit: It's possible to do it without loading the full image following this answer: https://stackoverflow.com/a/552642/2097240
从 JPEG 图像获取 EXIF 数据涉及:
Getting EXIF data from a JPEG image involves:
命令行工具 Phil Harvey 的 ExifTool 可处理多种图像格式 -包括大量专有的 RAW 格式 - 并且可以操作各种元数据格式,包括 EXIF、GPS、IPTC、XMP、JFIF。
非常易于使用,轻量级,令人印象深刻的应用程序。
The command line tool ExifTool by Phil Harvey works with dozens of images formats - including plenty of proprietary RAW formats - and can manipulate a variety of metadata formats including EXIF, GPS, IPTC, XMP, JFIF.
Very easy to use, lightweight, impressive application.
最近,我使用了这个 .NET 元数据 API。 我还写了 关于它的博客文章,其中展示了使用 C# 读取、更新和删除图像中的 EXIF 数据。
Recently, I used this .NET Metadata API. I have also written a blog post about it, that shows reading, updating, and removing the EXIF data from images using C#.
Image 类具有 PropertyItems 和 PropertyIdList 属性。 你可以使用它们。
Image class has PropertyItems and PropertyIdList properties. You can use them.
这是另一个类似的问题,其答案指向.Net 中的“读取、写入和照片元数据”。
Here is a link to another similar SO question, which has an answer pointing to this good article on "Reading, writing and photo metadata" in .Net.
最快的方法是使用 windows api 编解码器 不打开文件而是使用缓存的exif信息
fastest way is to use windows api codec that doesn't open file and instead uses cached exif information
查看这个元数据提取器。
它是用 Java 编写的,但也已移植到 C#。我使用 Java 版本编写了一个小实用程序,用于根据日期和型号标签重命名我的 jpeg 文件。 非常容易使用。编辑 元数据提取器也支持.NET。 它是一个非常快速且简单的库,用于访问图像和视频中的元数据。
它完全支持 Exif,以及 IPTC、XMP 和许多其他类型的元数据,包括 JPEG、PNG、GIF、PNG、ICO、WebP、PSD...,
可通过 NuGet 和 代码在 GitHub 上。
Check out this metadata extractor.
It is written in Java but has also been ported to C#.I have used the Java version to write a small utility to rename my jpeg files based on the date and model tags. Very easy to use.EDIT metadata-extractor supports .NET too. It's a very fast and simple library for accessing metadata from images and videos.
It fully supports Exif, as well as IPTC, XMP and many other types of metadata from file types including JPEG, PNG, GIF, PNG, ICO, WebP, PSD, ...
It's available via NuGet and the code's on GitHub.
您可以使用 TagLib#,它由 F-点。 除了 Exif 之外,它还能读取大量图像、音频和视频的元数据格式。
我也喜欢 ExifUtils API,但它有问题并且没有积极开发。
You can use TagLib# which is used by applications such as F-Spot. Besides Exif, it will read a good amount of metadata formats for image, audio and video.
I also like ExifUtils API but it is buggy and is not actively developed.