在c#中读取扩展图像属性

如果可能的话,我想find磁盘上的图像的高度/宽度而不打开它(出于性能原因)。

图像的Windows属性窗格包含宽度,高度,位深度等信息,这使我相信它将元数据存储在文件的某处。 我如何获取这些信息?

Solutions Collecting From Web of "在c#中读取扩展图像属性"

有关如何从图像读取EXIF信息的一些stackoverflow问题,如: 如何使用C#从一个文件中获取EXIF数据

使用System.Drawing.Image类。

Image img = Image.FromFile(fileName); ImageFormat format = img.RawFormat; Console.WriteLine("Image Type : "+format.ToString()); Console.WriteLine("Image width : "+img.Width); Console.WriteLine("Image height : "+img.Height); Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution)); Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat)); Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd")); Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss")); Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd")); Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss")); 

最简单的方法是假定图像是方形的,就是以字节为单位取文件大小并取平方根。 这将是你的宽度和高度。

 256 bytes = 16px x 16px 

🙂

或者,您可以尝试使用此codeplex库来读取图像的EXIF信息

Windows不会将(此)元数据存储在文件系统中的任何特殊位置; 属性窗口只是从图像文件本身读取它们。

我不认为.NET提供任何功能,只读取图像中的元数据,而不加载整个图像。 如果您只处理有限数量的不同图像格式(例如,只有JPEG,PNG和GIF),则自己从图像头中读取大小不应太难。

另一方面,如果你必须处理很多图像格式,也许你可以看看Unix file工具的源代码。 它设法检测许多不同的图像格式的大小,并迅速引导。

为了获得图像的宽度和高度(基本上,就像你所说的那样,元数据),你将不得不打开文件,解析某种头信息并以这种方式获得你想要的东西。

你不必读取所有的颜色/位图信息,只有标题。

这与Windows能够从应用程序文件加载图标而不实际执行它们的方式相同。

检查这个问题:

  • 如何在不加载图像的情况下可靠地获取图像尺寸?

要阅读由Windows资源管理器显示的属性,您可以使用Microsoft Shell Controls and Automation组件。 这样做的好处是,您不需要任何第三方库(COM对象已经存在)或附加代码来解析图像头,并且它将以各种格式工作。

示例代码可以在相关问题的答案中找到。