在asp.net中调整.jpg图像的大小并作为流存储

时间:2012-07-19 13:33:44

标签: c# image

我正在调整asp.net中的图像。我成功调整了图像大小。但是将其转换为流 .jpg图片不起作用。

这是我的代码 如果我将图像格式设置为jpeg它不起作用。因为在C#中没有.jpg的图像格式

 public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxWidth, int maxHeight)
    {
        var width=image.Width;
        var height=image.Height;

        var newWidth=0;
        var newHeight=0;
        var divisor=0;
        if (width > height) {
                    newWidth = maxWidth;
                    divisor = width / maxWidth;
                    if (divisor == 0)
                    {
                        divisor = 1;
                    }
                    newHeight = Convert.ToInt32(height /divisor);
                }
                else {
                    newHeight = maxHeight;
                    divisor = height / maxHeight;
                    if (divisor == 0)
                    {
                        divisor = 1;
                    }
                    newWidth = Convert.ToInt32(width / divisor);
                }


        var newImage = new Bitmap(newWidth, newHeight);

        Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
        return newImage;

    }

public static Stream ToStream(this System.Drawing.Image image, ImageFormat formaw)
    {
        var stream = new System.IO.MemoryStream();
        //stream.ReadTimeout = 100000;
        image.Save(stream, formaw);
        stream.Position = 0;
        //stream.ReadTimeout = 100000;
        return stream;
    }

2 个答案:

答案 0 :(得分:1)

如果在ASP.NET服务中使用,必须显式处理所有System.Drawing类。 这不是可选的。您将以任何大量流量使服务器崩溃。

目前,您的代码依赖于GC来取消分配GraphicsBitmap实例。不幸的是,GC将这两个对象视为微小的低优先级对象,并且不知道它们实际上占用了100多MB的RAM。

以下是一些如何安全地进行图像大小调整以及质量更好的示例:

LightResize

它是麻省理工学院许可的,所以不用担心使用限制。

答案 1 :(得分:0)

您正在寻找的ImageFormat是ImageFormat.Jpeg