C# 提取图像文件元数据
我希望能够在不打开文件的情况下提取图像的元数据和扩展属性。换句话说,当您在windows中右键单击文件并选择“详细信息”选项卡时,如何通过编程访问显示的信息 使用.Net Framework 4.5及更高版本执行此操作的正确方法是什么?我已经找到了各种各样的方法来实现这一点,但是这些文章都提到了.NETFramework2,至少可以说,它是乏味的,而且可能已经过时了。具体来说,是否有任何库可以使这项工作变得简单 编辑C# 提取图像文件元数据,c#,windows,C#,Windows,我希望能够在不打开文件的情况下提取图像的元数据和扩展属性。换句话说,当您在windows中右键单击文件并选择“详细信息”选项卡时,如何通过编程访问显示的信息 使用.Net Framework 4.5及更高版本执行此操作的正确方法是什么?我已经找到了各种各样的方法来实现这一点,但是这些文章都提到了.NETFramework2,至少可以说,它是乏味的,而且可能已经过时了。具体来说,是否有任何库可以使这项工作变得简单 编辑 我需要能够获得以下格式的图像的高度和宽度尺寸:png、jpg、jpeg、gi
我需要能够获得以下格式的图像的高度和宽度尺寸:png、jpg、jpeg、gif、bmp和pdf(可以安全地假设pdf仅包含1页)。我自己做过这件事,因为我需要为我的一个项目读取XMP数据 为此,我使用了:它是Adobe的XMP工具包的包装器
这不是性能最好的,但这对我来说并不重要,因为我在上传资产时是以批处理的方式完成的 当然,需要打开文件才能读取元数据。也就是说,这可能不是最有效的方法,但是
System.Drawing.Image
类应该能提供您所需要的一切。使用FromFile
创建图像对象。然后,您可以使用尺寸的Height
和Width
属性,以及PropertyIdList
和PropertyItems
来获取其他可用信息
顺便说一句,据我所知,每种图像格式的高度和宽度都是可用的。。以下是我的发现
PropertyItems
Id
值中的十六进制值的含义using System;
using System.Drawing.Imaging;
using System.Drawing;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// Add reference => Assemblies => Framework => System.Drawing
// Set the path to your photo file.
var path = @"[Path to your image]";
// Create image object
var image = new Bitmap(path);
// Get PropertyItems
var propItems = image.PropertyItems;
// Remove encoding object
var encodings = new ASCIIEncoding();
// Display
foreach (var propItem in propItems)
{
// The values below come from http://msdn.microsoft.com/en-us/library/xddt0dz7(v=vs.110).aspx
// Find al values available with Console.WriteLine(propItem.Id.ToString("x"));
if (propItem.Id.ToString("x").Equals("110")) //Equipment model
{
var model = encodings.GetString(propItem.Value);
Console.WriteLine("Model:\t" + model);
}
if (propItem.Id.ToString("x").Equals("9003")) //ExifDTOriginal
{
var datetime = encodings.GetString(propItem.Value);
Console.WriteLine("Taken:\t" + datetime);
}
}
Console.Read();
}
}
}
// =>
// Model: FinePix S9500
// Taken: 2012:11:30 13:58:04
希望这有帮助。:-)
/sasha_gud评论说,编辑可能更简单。您到底在寻找什么元数据?具体是高度和宽度(目前)。从我阅读的文章中,有人提到这些数据并不总是适用于所有图像?如果我能找到一个可以轻松解决这一问题的库,那将是一个额外的收获(但出于性能原因,我更希望它首先尝试读取exif数据)。这可能就是您要寻找的: