我想用 C# 编写一个小程序,它可以浏览我的 jpeg 照片,例如,将它们分类到带日期的文件夹中(使用我的约会约定,该死......)。

有谁知道以编程方式获取 EXIF 数据(例如日期和时间或曝光)的相对简单的方法?谢谢!

有帮助吗?

解决方案

看看这个 元数据提取器. 它是用 Java 编写的,但也已移植到 C#。 我使用 Java 版本编写了一个小实用程序来根据日期和型号标签重命名我的 jpeg 文件。非常容易使用。


编辑 元数据提取器 也支持.NET。它是一个非常快速且简单的库,用于访问图像和视频中的元数据。

它完全支持 Exif,以及 IPTC、XMP 和许多其他类型的元数据,包括 JPEG、PNG、GIF、PNG、ICO、WebP、PSD...

var directories = ImageMetadataReader.ReadMetadata(imagePath);

// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
    Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}");

// access the date time
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

它可以通过 努格特代码在 GitHub 上.

其他提示

正如建议的那样,您可以使用一些第三方库,或者手动完成(这不是很多工作),但最简单和最灵活的可能是使用 .NET 中的内置功能。更多请参见:

我说“它是最灵活的”,因为 .NET 不会尝试以任何方式解释或合并数据。对于每个 EXIF,您基本上都会得到一个字节数组。这可能是好是坏,具体取决于您实际想要的控制程度。

另外,我应该指出,属性列表实际上并不直接对应于 EXIF 值。EXIF 本身存储在具有重叠 ID 的多个表中,但 .NET 将所有内容放在一个列表中,并重新定义了某些项目的 ID。但只要您不关心精确的 EXIF ID,您就应该可以使用 .NET 映射。

这是另一个的链接 类似的问题, ,其中有一个答案指向这篇好文章 “阅读、写作和照片元数据” 在.Net中。

您可以使用 标签库# 它被诸如以下的应用程序使用 F点. 。除了 Exif 之外,它还能读取大量图像、音频和视频的元数据格式。

我也喜欢 Exif实用程序 API,但它有缺陷并且没有积极开发。

Image 类具有 PropertyItems 和 PropertyIdList 属性。你可以使用它们。

从 JPEG 图像获取 EXIF 数据涉及:

  1. 寻找提及 EXIF 数据开头的 JPEG 标记。例如通常oxFFE1是编码EXIF数据时插入的标记,它是一个APPlication段,EXIF数据所在的位置。
  2. 解析从 0xFFE1 到 0xFFE2 的所有数据。该数据将是 JPEG 编码文件中的字节流。
  3. 这些字节的 ASCII 等效项将包含与图像日期、相机型号名称、曝光等相关的各种信息...

命令行工具 ExifTool 由菲尔·哈维 (Phil Harvey) 设计 适用于数十种图像格式 - 包括大量专有的 RAW 格式 - 并且可以操作各种元数据格式,包括 EXIF、GPS、IPTC、XMP、JFIF。

非常易于使用,轻量级,令人印象深刻的应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top