C# 使用ImageResizer.net确定图像的当前大小

C# 使用ImageResizer.net确定图像的当前大小,c#,imageresizer,C#,Imageresizer,我们最近开始在ASP.NET MVC 4应用程序上使用over GDI+动态调整图像大小 是否有一种仅使用ImageResizer的方法来确定图像(作为字节数组读入)的实际分辨率(DPI、PPI,无论您想怎么称呼它)。我们目前有这样一个工作流,在需要时将图像调整到指定的较低分辨率: //pseudo-code var image = (Bitmap)Bitmap.FromStream(contentStream) var resX = image.HorizontalResolution; va

我们最近开始在ASP.NET MVC 4应用程序上使用over GDI+动态调整图像大小

是否有一种仅使用ImageResizer的方法来确定图像(作为字节数组读入)的实际分辨率(DPI、PPI,无论您想怎么称呼它)。我们目前有这样一个工作流,在需要时将图像调整到指定的较低分辨率:

//pseudo-code
var image = (Bitmap)Bitmap.FromStream(contentStream)
var resX = image.HorizontalResolution;
var resY = image.VerticalResolution;
//calculate scale factor
//determine newHeight and newWidth from scale
var settings = new ResizeSettings("width={newWidth}&height={newHeight}")
var newImage = ImageBuilder.Current.Build(image, someNewImage, settings);
这很好,但是它混合了GDI+和ImageResizer,并且有很多相同数据的流打开和关闭(实际代码有点冗长,有许多
使用
语句)

是否有一种仅使用ImageResizer确定水平和垂直分辨率的方法?我无法立即在文档中找到任何内容


目前,我们已经使用了托管api,但最终将使用MVC路由。

这就是您想要的吗


这是一种相当非典型的情况-通常输入的DPI值是毫无价值的

然而,由于您似乎可以控制这些值,并且需要它们来执行大小计算,因此我建议使用一个插件。它们很简单,并提供理想的性能,因为您不会重复工作

public class CustomSizing:BuilderExtension, IPlugin {

    public CustomSizing() { }

    public IPlugin Install(Configuration.Config c) {
        c.Plugins.add_plugin(this);
        return this;
    }

    public bool Uninstall(Configuration.Config c) {
        c.Plugins.remove_plugin(this);
        return true;
    }
    //Executes right after the bitmap has been loaded and rotated/paged
    protected override RequestedAction PostPrepareSourceBitmap(ImageState s) {
        //I suggest only activating this logic if you get a particular querystring command.
        if (!"true".Equals(s.settings["customsizing"], 
            StringComparison.OrdinalIgnoreCase)) return RequestedAction.None;

        //s.sourceBitmap.HorizontalResolution
        //s.sourceBitmap.VerticalResolution

        //Set output pixel dimensions and fit mode
        //s.settings.Width = X;
        //s.settings.Height = Y;
        //s.settings.Mode = FitMode.Max;

        //Set output res.
        //s.settings["dpi"] = "96";
        return RequestedAction.None;
    }
 }
安装可以通过

新建CustomSizing().Install(Config.Current)

或在:



通常,嵌入的DPI值不正确或毫无价值。除非您只使用certian图像格式,并且已经精确控制了它们的编码方式,否则我看不出您在计算中如何依赖它们。您能再解释一下您的使用场景吗?我们有合同义务在通过某种方式访问时仅提供max-96dpi图像。我们通过将图像缩小到该dpi的大小,然后在
位图
类上设置分辨率来实现这一点。这似乎适用于PNG和JPG图像,并且需要缩放的图像的来源是已知的(即:不是用户上传的),虽然我们还没有实现此功能,但我认为这是最简单/最可靠的方法。答案似乎提供了所有必要的信息。ThanksHow它能给你原来的尺寸吗?看起来他希望你把它交给函数
   <plugins>
     <add name="MyNamespace.CustomSizing" />
   </plugins>