在 C# 中读取扩展图像属性
-
20-09-2019 - |
题
如果可能的话(出于性能原因),我想在不打开图像的情况下找到磁盘上图像的高度/宽度。
Windows 图像属性窗格包含宽度、高度、位深度等信息,这让我相信它在文件的某个位置存储元数据。我如何访问这些信息?
解决方案
stackoverflow上有一些关于如何从图像中读取EXIF信息的问题,例如: 如何使用 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资源管理器中显示的属性,你可以使用的微软壳牌控制和自动化的组件。这样做的好处是,你不需要任何第三方库(COM对象已经存在),或者用于解析图像头额外的代码,它会用多种格式工作。
示例代码可在应答被发现一个相关问题