【问题标题】:Best way to get image dimensions using ImageResizer使用 ImageResizer 获取图像尺寸的最佳方法
【发布时间】:2015-01-10 17:00:28
【问题描述】:

我正在将现有的 MVC 4 网站从自制用户文件上传切换到在上传文件时使用 ImageResizer 调整文件大小。

我在文档中看到我不应该使用 System.Drawing,但我想不出任何其他获取图像尺寸的方法。

尺寸来自原始图像还是调整大小的图像都没有关系,因为我保留纵横比并且只需要确定图像是横向还是纵向。

我在这里添加我在回复@Nathanael 的回答的评论中提到的代码。

  ImageJob ij = new ImageJob(file, requestedImageInfo: null);

             int ? y = ij.SourceWidth;
             int ?  z = ij.SourceHeight;

【问题讨论】:

  • 谢谢,那是缺失的部分。我对 ImageResizer 非常满意。 (FWIW,我注意到编译器似乎并不介意那个空间,对我来说,在笔记本电脑上工作时更容易看到。)

标签: c# asp.net-mvc-4 imageresizer


【解决方案1】:

如果您可以在上传期间存储图像尺寸(来自ImageJob.SourceWidth/Height 或 LoadImageInfo),那是最好的,因为从文件中读取图像尺寸涉及大量 I/O。

如果没有,ImageResizer 会在事后提供IDictionary LoadImageInfo(object source, IEnumerable requestedInfo) 方法来执行此操作。请记住,它确实涉及从磁盘读取,并且您不想在单个 HTTP 请求中多次调用它。将这些数字放入数据库中。

您始终可以通过ImageBuilder.GetFinalSize(originalSize, instructions) 计算图像的最终尺寸。另一方面,这非常快,因为它不涉及 I/O,只涉及数学。

【讨论】:

  • 非常感谢你,纳撒尼尔。希望您不会介意通过告诉我我的语法有什么问题来帮助我。我首先有这个代码,在发布的文件被测试为空之后。 imagejob 不为空,但 SouceHeight 和 SourceWidth 都是。我将上面的代码粘贴到我原来的问题中。
  • 好吧,int? 之间的空格可能会产生编译器错误。在尝试访问结果之前,您还需要致电 ij.Build()
  • var imageInfoJob = new ImageJob(file.InputStream, null); var imageInfo = imageInfoJob.Build();这就是你如何获得图像文件的尺寸。 ImagerResizer 文档没有示例。
猜你喜欢
  • 1970-01-01
  • 2014-03-07
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多