【问题标题】: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 像素的尺寸...

标签: c# image dimensions


【解决方案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/#exampleGetting StartedInstall Via Nuget部分。
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多