C#检索佳能特定的EXIF数据

6

我写了一个应用程序,通过.Net的System.Drawing.Image类中公开的PropertyItems读取图像的基本EXIF数据。然而,我无法通过这些属性检索到佳能特定的EXIF数据。如何读取这些信息?我知道它存在于文件中,因为Photoshop可以读取它。

6个回答

3

我之前发现了这个工具,但还没有使用过。看起来它有制造商特定的信息。

http://renaud91.free.fr/MetaDataExtractor/

更新:

自2002年以来,metadata-extractor项目一直在Java上运行良好,并且现在也可用于.NET。它全面支持佳能、爱克发、卡西欧、爱普生、富士、柯达、京瓷、徕卡、美能达、尼康、奥林巴斯、松下、宾得、三洋、Sigma/Foveon和索尼相机和扫描仪的makernote。

您可以在此处浏览几个佳能(和其他)相机图像的示例输出。

该库可通过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#检索佳能特定的EXIF数据


1
我可以验证这个工具的出色表现!许多制造商将大部分有用的Exif数据存储在“Makernote”字段中。这个工具将所有这些数据解析成一个漂亮的小型XML友好字典,其中包含了Exif标签。 - glenneroo
这是我_metadata-extractor_项目的过时端口。我现在维护一个官方的C#版本,它具有更多的功能和许多错误修复。有关更多信息,请参见我的答案 - Drew Noakes

2
metadata-extractor项目自2002年以来一直在Java中运行良好,现在已经推出了.NET版本。它全面支持佳能的makernote,以及来自Agfa、Casio、Epson、Fujifilm、Kodak、Kyocera、Leica、Minolta、Nikon、Olympus、Panasonic、Pentax、Sanyo、Sigma/Foveon和Sony相机和扫描仪的makernote。
您可以查看几个佳能(和其他)相机图像的示例输出 此处
该库可通过NuGetGitHub获得。
用法示例:
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的回答中的库是我多年前的Java库的过时版本。现在我维护C#和Java项目以实现功能平衡。

2
如果您正在编译针对 Framework 的 v3(或更高版本),则可以使用 BitmapSource 加载图像,该类通过 Metadata 属性 公开 EXIF 元数据。这将更加接近图片中的 EXIF 信息,尽管制造商注释是具体的,需要进一步解码。

1
如果它们是RAW文件,你可以尝试使用dcraw.net来获取信息。

1

在BCL中没有任何内置的东西可以帮助处理EXIF。

看看this SO问题和答案(什么是最好的.Net EXIF库?)。有几个商业和开源库可用于获取EXIF数据。


0

我几个月前在C#中编写了一个取证工具,并使用Phil Harvey的EXIF Tool从照片中获取EXIF数据。是的,它是一个PERL库,但是非常容易安装并集成到我的C#应用程序中。


嗨,markp3rry!我也在处理同类型的项目。我能够获取图像的EXIF数据,但我还需要APP1格式的数据。你是否也获得了那些数据?如果是的话,你能否分享一下如何获取那些数据? - Som

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接