我编写了一个应用程序,它通过 .Net 的 System.Drawing.Image 类中公开的 PropertyItems 从图像中读取基本 EXIF 数据。但是,我无法通过这些属性检索佳能特定的 EXIF 数据。人们如何阅读这些信息?我知道它存在于文件中,因为 Photoshop 会读取它。
6 回答
我不久前发现了这个,但还没有使用它。看起来它有制造商的特定信息。
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
如果您正在针对框架的 v3(或更高版本)进行编译,那么您可以使用BitmapSource
类加载图像,该类通过Metadata
属性公开 EXIF 元数据。这与图片中的 EXIF 信息有更紧密的联系,尽管制作者注释是特定的,需要进一步解码。
元数据提取器项目自 2002 年以来一直在 Java 中运行良好,现在可用于 .NET。它全面支持佳能 makernotes 以及 Agfa、Casio、Epson、Fujifilm、Kodak、Kyocera、Leica、Minolta、Nikon、Olympus、Panasonic、Pentax、Sanyo、Sigma/Foveon 和 Sony 相机和扫描仪。
您可以在此处浏览多个佳能(和其他)相机图像的示例输出。
示例用法:
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 的答案中的 lib 是多年前我的 Java 库的一个过时端口。我现在维护 C# 和 Java 项目以实现功能对等。
BCL 中没有任何内容可以帮助 EXIF。
看看这个SO 问题和答案(What is the best EXIF library for .Net?)。有几个商业和开源库可用于获取 EXIF 数据。
如果它们是 RAW 文件,您可以尝试使用 dcraw.net来获取信息。
I wrote a forensic tool a few months ago in C# and used Phil Harvey's EXIF Tool to get the EXIF data from photographs. Yep, it's a PERL library but it was really easy to install and integrate into my C# application.