如何获取图像文件的尺寸?
Posted
技术标签:
【中文标题】如何获取图像文件的尺寸?【英文标题】:How to get the the dimensions of an image file? 【发布时间】:2011-09-21 07:25:01 【问题描述】:我有一个名为FPN = "c:\ggs\ggs Access\images\members\1.jpg "
的文件
我正在尝试获取图像1.jpg
的尺寸,我想在加载前检查图像尺寸是否有效。
【问题讨论】:
我所知道的没有图像格式可以具有 0 像素的尺寸... 【参考方案1】:System.Drawing.Image img = System.Drawing.Image.FromFile(@"c:\ggs\ggs Access\images\members\1.jpg");
MessageBox.Show("Width: " + img.Width + ", Height: " + img.Height);
【讨论】:
@User1:您应该编辑您的问题,以便更清楚地了解“大小”的含义。 这可以计算图像的大小,但如果文件不是有效的图像文件,它将在第一行而不是文件的高度或宽度为 0 时抛出异常.不知道为什么 OP 认为检查图像的尺寸是否为 0 x 0 是检查有效图像文件的适当方法。 它抛出一个异常,说内存不足 @user682417 考虑使用Image.FromStream
,这样您就可以避免将整个文件加载到内存中(并且更快)——参见roelvanlisdonk.nl/2012/02/28/…
对于.net core nuget System.Drawing.Common re:hanselman.com/blog/HowDoYouUseSystemDrawingInNETCore.aspx【参考方案2】:
Wpf 类 System.Windows.Media.Imaging.BitmapDecoder
不读取整个文件,只读取元数据。
using(var imageStream = File.OpenRead("file"))
var decoder = BitmapDecoder.Create(imageStream, BitmapCreateOptions.IgnoreColorProfile,
BitmapCacheOption.Default);
var height = decoder.Frames[0].PixelHeight;
var width = decoder.Frames[0].PixelWidth;
2019-07-07 更新
处理exif
'ed 图像有点复杂。由于某些原因,iphone 会保存旋转的图像并作为补偿,他们还设置了“在显示前旋转此图像”exif 标志。
Gif 也是一种相当复杂的格式。可能没有帧具有完整的 gif 大小,您必须从偏移量和帧大小聚合它。
所以我改用ImageProcessor,它为我解决了所有问题。从来没有检查过它是否读取了整个文件,因为有些浏览器不支持exif
,我不得不保存一个旋转的版本。
using (var imageFactory = new ImageFactory())
imageFactory
.Load(stream)
.AutoRotate(); //takes care of ex-if
var height = imageFactory.Image.Height,
var width = imageFactory.Image.Width
【讨论】:
这应该是最佳答案,因为它实际上回答了问题。 @person27 感谢您的评论,当 QA 向我的代码提供一些讨厌的图像时,我已经完全忘记了这个答案。现在答案已更新。 ImageProcessor 站点没有列出如何使用...也没有列出要安装的 Nuget 包页面。我错过了什么吗? @ΩmegaMan 上面有3个链接,点击ImageProcessor
给我imageprocessor.org/imageprocessor/imagefactory/#example和Getting Started
有Install Via Nuget
部分。以上是关于如何获取图像文件的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章