图像调整asp.net mvc应用程序的大小

时间:2012-03-09 19:59:47

标签: c# asp.net-mvc file file-io

发布后加入了链接

在asp.net mvc。

中阅读关于图像大小调整[here] [1]的非常好的帖子

http://dotnetslackers.com/articles/aspnet/Testing-Inbound-Routes.aspx

我需要这个逻辑来处理在cdn中上传的图像。例如,我已经在cdn中上传了一个图像,现在我想从我的控制器中取出它并调整它的大小。此外,图像不应该被保存在我的服务器中,因为它消耗宝贵的资源并不是一个好主意。图像必须从CDN读取并重新调整大小而不在本地保存在服务器中。如何使用上述帖子中给出的方法实现此目的。

谢谢, S上。

3 个答案:

答案 0 :(得分:9)

如果您使用ASP.Net MVC3,您可以尝试新的帮助程序 - WebImage。

这是我的测试代码。

    public ActionResult GetImg(float rate)
    {
        WebClient client = new WebClient();
        byte[] imgContent = client.DownloadData("ImgUrl");
        WebImage img = new WebImage(imgContent);
        img.Resize((int)(img.Width * rate), (int)(img.Height * rate));
        img.Write();

        return null;
    }

答案 1 :(得分:1)

您可以使用System.Drawing命名空间中的GDI +功能

Bitmap newBitmap = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)newBitmap);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(sourceImage, 0, 0, destWidth, destHeight);
g.Dispose();

答案 2 :(得分:1)

这是我使用的。效果很好。

    private static Image ResizeImage(Image imgToResize, Size size)
    {
        int sourceWidth = imgToResize.Width;
        int sourceHeight = imgToResize.Height;

        float nPercent = 0;
        float nPercentW = 0;
        float nPercentH = 0;

        nPercentW = ((float)size.Width / (float)sourceWidth);
        nPercentH = ((float)size.Height / (float)sourceHeight);

        if (nPercentH < nPercentW)
            nPercent = nPercentH;
        else
            nPercent = nPercentW;

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);

        Bitmap b = new Bitmap(destWidth, destHeight);
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
        g.Dispose();

        return (Image)b;
    }