当前位置:  开发笔记 > 编程语言 > 正文

如何使用C#从文件中获取EXIF数据

如何解决《如何使用C#从文件中获取EXIF数据》经验,为你挑选了5个好方法。

我想在C#中编写一个小程序,通过我的jpeg照片,例如,将它们分类为过时的文件夹(使用我的约会惯例,该死...).

有没有人知道以编程方式获取日期和时间或曝光等EXIF数据的相对简单的方法?谢谢!



1> Jan Zich..:

正如所建议的,您可以使用某些第三方库,或者手动执行(这不是那么多工作),但最简单和最灵活的可能是使用.NET中的内置功能.欲了解更多信息:

System.Drawing.Image.PropertyItems属性

System.Drawing.Imaging.PropertyItem类

如何:读取图像元数据

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

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


访问Bitmap.PropertyItems需要将整个文件读入内存.如果您创建一个Bitmap,访问PropertyItems而不执行任何其他操作,您可以使用XPerf查看您的应用程序访问了该图像文件并将其全部读入内存.对于我的计算机,一个3.4mb的文件成本> 700ms的IO,只是为了通过PropertyItems获得EXIF :(.
@jrista我经常只想要元数据?大多数时候.例如,假设您想要按一段元数据对一组图像进行排序或过滤.按日期排序是很常见的事情,要获得该信息,您必须进入元数据.
相比之下,Picasa的PhotoViewer只能从它接触的每个文件中读取20 - 30k.这些读取仅花费约25ms.哇; 我很想和写那些东西的男/女聊天.(数据是通过使用XPerf分析PhotoViewer的启动来收集的).

2> Dave Griffit..:

查看此元数据提取器.它是用Java编写的,但也被移植到C#.我已经使用Java版本编写了一个小工具来根据日期和模型标签重命名我的jpeg文件.非常好用.


EDIT 元数据提取器也支持.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().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

它可以通过NuGet和GitHub上的代码获得.



3> Joel in Gö..:

这是一个链接到另一个类似的SO问题,它的答案指向.Net中关于"阅读,写作和照片元数据"的好文章.



4> smola..:

您可以使用由F-Spot等应用程序使用的TagLib#.除了Exif之外,它还会读取大量的图像,音频和视频元数据格式.

我也喜欢ExifUtils API,但它有缺陷并且没有积极开发.



5> idursun..:

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


在新图像上使用Image.SetPropertyItem(PropertyItem)函数.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有