【问题标题】:EXIF library for .NET 4.0 framework [closed].NET 4.0 框架的 EXIF 库 [关闭]
【发布时间】:2015-11-23 06:02:59
【问题描述】:

我已经搜索过这个主题,但我能找到的唯一合适的主题是 2008 年的,因此我提出了新问题。

我正在考虑使用 C# .Net 4.0 语言开发程序。我的程序的目的是从 jpeg(制造商、模型、地理位置信息等)中提取 EXIF 信息,然后将其填充到 MySql / Sql 服务器数据库中。

谁能推荐任何适合这个项目的好库?我也会寻找相机序列号(我知道这因制造商而异),但如果有人知道任何解决此问题的现有库,那将是最有帮助的。

谢谢,周末愉快

【问题讨论】:

  • 您在寻找免费的图书馆还是商业的?
  • 我正在寻找两者。这一切都取决于商业成本,但如果你能推荐任何,我很乐意看看它们。如果有免费的做得很好,那么我更喜欢它们:)
  • 我没有尝试任何免费的...但是看看 LeadTools 或 GdPicutre... 特别是。相机的特定信息将是一场噩梦,因为它经常变化,所以您需要经常更新......
  • thisthis
  • EXIF 自 2008 年以来没有改变。当时相关的内容现在仍然相关。

标签: c# .net exif


【解决方案1】:

metadata-extractor 项目自 2002 年以来一直适用于 Java,并且现在可用于 .NET 3.5 及更高版本。还有一个PCL版本。

  • 开源 (Apache 2.0)
  • 经过大量测试并广泛使用
  • 支持多种图像类型(JPEG、TIFF、PNG、WebP、GIF、BMP、ICO、PCX...)
  • 支持多种元数据类型(Exif、IPTC、XMP、JFIF...)
  • 支持许多制造商特定的领域(佳能、尼康……)
  • 非常快(在约 3 秒内完全处理约 400 张图像,总计 1.33GB)且内存消耗低

可通过NuGetGitHub 获得。

示例用法:

IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path);

foreach (var directory in directories)
foreach (var tag in directory.Tags)
    Console.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}");

(披露:我维护这个库)

【讨论】:

  • 不是 OP 要求的,因为它只是 .NET 4.5+
  • @vanhelgen,感谢您的反馈!我还将添加对早期版本的 .NET 的支持。见this new issue
  • @vanhelgen,完成。 NuGet 上的 1.1.0 版已发布,同时支持 .NET 3.5 和 4.5。如果您能测试一下并告诉我您的进展情况,那就太好了。
  • 让 v1.1.0 在我的 .NET4.0 项目中正常工作,没有任何问题。再次感谢!
  • @DrewNoakes 谢谢,你为我节省了一些时间来研究它。我一定会试一试的。
【解决方案2】:

这篇 CodeProject 文章是上个月刚写的,它的 API 比其他一些 .NET EXIF 阅读器有了很大的改进:

http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0

它也可通过Nuget 获得,并在CPOL 下获得许可。

【讨论】:

    【解决方案3】:

    对于基本的 EXIF 信息(制造商、相机型号、时间、光圈等),我会查看 System.Drawing.Image 类 - 特别是 PropertiesItems 集合。

    这个类有缺点。它需要在检索 EXIF 信息之前将整个图像加载到内存中(即它有点慢)。它也不处理所有在相机之间不一致的供应商特定字段。

    Image.PropertyItems

    MSDN: Reading Image Metadata

    PropertyItem.Id

    我已经成功地使用它来收集有关我的照片集的信息(用十几个不同品牌和型号的不同数码相机拍摄的数万张照片)。

    【讨论】:

    • 我也用它来获取 EXIF 信息,发现效果很好。您是否知道有一种内置方法可以跳过图像的加载而只获取元数据?速度大幅提升!您必须使用Image.FromFile(Stream, false, false)...在此处查看更多信息:msdn.microsoft.com/en-us/library/21zw9ah6.aspx
    • 如果速度很重要,您还可以为 .NET 4.0 编译 exifLib:codeproject.com/Articles/36342/…。读取单个标签时,它比 Image.FromFile(stream, false, false) 更快。如果你需要读取很多标签,内置的框架库可能会更快。
    • exifLib 项目页面上有一条有趣的评论:“使用 System.Drawing.Image 可以通过将构造函数的 validateImageData 参数设置为 false 来提高性能。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多