如何获取图像文件的尺寸?

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 StartedInstall Via Nuget部分。

以上是关于如何获取图像文件的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不下载 Java 的情况下获取网站图像的尺寸?

在不读取整个文件的情况下获取图像尺寸

在不读取整个文件的情况下获取图像尺寸

从二进制获取图像尺寸和图像大小

在.bat文件中获取图像文件尺寸

使用 Javascript 文件 API 获取图像尺寸