使用 ImageResizer 获取图像尺寸的最佳方法
Best way to get image dimensions using ImageResizer
我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传文件时使用 ImageResizer 调整文件大小。
我在文档中看到我不应该使用 System.Drawing,但我想不出任何其他获取图像尺寸的方法。
尺寸来自原始图像还是调整后的图像并不重要,因为我保留纵横比,只需要确定图像是横向还是纵向。
我在此处添加我在回复@Nathanael 的回答时引用的代码。
ImageJob ij = new ImageJob(file, requestedImageInfo: null);
int ? y = ij.SourceWidth;
int ? z = ij.SourceHeight;
如果您可以在上传过程中存储图像尺寸(来自 ImageJob.SourceWidth/Height 或 LoadImageInfo),那是最好的,因为从文件中读取图像尺寸涉及很多 I/O。
如果没有,ImageResizer 会提供 IDictionary LoadImageInfo(object source, IEnumerable requestedInfo) 方法在事后这样做。请记住,它确实涉及从磁盘读取,并且您不想在单个 HTTP 请求中多次调用它。将这些数字存入数据库。
您始终可以通过 ImageBuilder.GetFinalSize(originalSize, instructions)
计算图像的最终大小。另一方面,这非常快,因为它不涉及 I/O,只涉及数学。
我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传文件时使用 ImageResizer 调整文件大小。
我在文档中看到我不应该使用 System.Drawing,但我想不出任何其他获取图像尺寸的方法。
尺寸来自原始图像还是调整后的图像并不重要,因为我保留纵横比,只需要确定图像是横向还是纵向。
我在此处添加我在回复@Nathanael 的回答时引用的代码。
ImageJob ij = new ImageJob(file, requestedImageInfo: null);
int ? y = ij.SourceWidth;
int ? z = ij.SourceHeight;
如果您可以在上传过程中存储图像尺寸(来自 ImageJob.SourceWidth/Height 或 LoadImageInfo),那是最好的,因为从文件中读取图像尺寸涉及很多 I/O。
如果没有,ImageResizer 会提供 IDictionary LoadImageInfo(object source, IEnumerable requestedInfo) 方法在事后这样做。请记住,它确实涉及从磁盘读取,并且您不想在单个 HTTP 请求中多次调用它。将这些数字存入数据库。
您始终可以通过 ImageBuilder.GetFinalSize(originalSize, instructions)
计算图像的最终大小。另一方面,这非常快,因为它不涉及 I/O,只涉及数学。