【发布时间】:2016-01-03 22:22:39
【问题描述】:
我编写了一个应用程序,它通过 .Net 的 System.Drawing.Image 类中公开的 PropertyItems 从图像中读取基本 EXIF 数据。但是,我无法通过这些属性检索佳能特定的 EXIF 数据。人们如何阅读这些信息?我知道它存在于文件中,因为 Photoshop 会读取它。
【问题讨论】:
我编写了一个应用程序,它通过 .Net 的 System.Drawing.Image 类中公开的 PropertyItems 从图像中读取基本 EXIF 数据。但是,我无法通过这些属性检索佳能特定的 EXIF 数据。人们如何阅读这些信息?我知道它存在于文件中,因为 Photoshop 会读取它。
【问题讨论】:
我不久前发现了这个,但还没有使用它。看起来它有制造商的具体信息。
http://renaud91.free.fr/MetaDataExtractor/
更新:
元数据提取器项目自 2002 年以来一直适用于 Java,并且现在可用于 .NET。它全面支持佳能的 makernotes 以及 Agfa、Casio、Epson、Fujifilm、Kodak、Kyocera、Leica、Minolta、Nikon、Olympus、Panasonic、Pentax、Sanyo、Sigma/Foveon 和 Sony 相机和扫描仪。
您可以在此处浏览多个佳能(和其他)相机图像的示例输出。
该库可通过 NuGet 或 GitHub 获得。
示例用法:
IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path);
foreach (var directory in directories)
foreach (var tag in directory.Tags)
{
Console.Out.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}");
}
在此处查看更新的答案:C# Retrieve Canon Specific EXIF Data
【讨论】:
Makernote 字段中。这个工具将所有这些解析成一个漂亮的、对 XML 友好的、充满 Exif 标记的字典。
如果您要针对框架的 v3(或更高版本)进行编译,则可以使用 BitmapSource class 加载图像,它通过 Metadata property 公开 EXIF 元数据。这与图片中的 EXIF 信息有更紧密的联系,尽管制作者注释是特定的,需要进一步解码。
【讨论】:
metadata-extractor 项目自 2002 年以来一直在 Java 中运行良好,现在可用于 .NET。它全面支持佳能的 makernotes 以及 Agfa、Casio、Epson、Fujifilm、Kodak、Kyocera、Leica、Minolta、Nikon、Olympus、Panasonic、Pentax、Sanyo、Sigma/Foveon 和 Sony 相机和扫描仪。
您可以浏览多个佳能(和其他)相机图像here 的示例输出。
示例用法:
IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path);
foreach (var directory in directories)
foreach (var tag in directory.Tags)
{
Console.Out.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}");
}
请注意,Mark Redman's answer 中的库是我多年前的 Java 库的过时端口。我现在维护 C# 和 Java 项目以实现功能对等。
【讨论】:
BCL 中没有内置任何内容可以帮助 EXIF。
查看this SO 问题和答案(什么是 .Net 的最佳 EXIF 库?)。您可以使用多个商业和开源库来获取 EXIF 数据。
【讨论】:
如果是 RAW 文件,您可以try using dcraw.net 获取信息。
【讨论】:
几个月前,我用 C# 编写了一个取证工具,并使用 Phil Harvey 的 EXIF Tool 从照片中获取 EXIF 数据。是的,它是一个 PERL 库,但它很容易安装并集成到我的 C# 应用程序中。
【讨论】: