ASP.NET网页 - 使用WebImage调整大小和保存照片

时间:2012-03-14 21:19:33

标签: c# asp.net razor image-resizing

我正在使用ASP.NET网页创建一个表单,我可以在其中选择图像。我想将图像调整为各种不同的尺寸,以便我可以在我的网站上显示它们。

这适用于较小的图像(在文件大小),但我想要调整大小的图像来自我的数码单反相机,它们可以大到每个jpeg 14MB。我收到了以下错误...

Maximum request length exceeded.

我使用以下代码添加了web.config

<?xml version="1.0"?>

<configuration>

    <system.web>
        <compilation debug="false" targetFramework="4.0" />
        <httpRuntime maxRequestLength="20480" />  
    </system.web>

</configuration>

我不再收到错误,但实际上并没有做任何事情。它仍适用于较小的图像。

我在这里使用了教程:http://www.asp.net/web-pages/tutorials/files,-images,-and-media/9-working-with-images

我的代码如下:

@{  WebImage photo = null;
    var newFileName = "";
    var imagePath = "";
    var imageThumbPath  = "";

    if(IsPost){
        photo = WebImage.GetImageFromRequest();
        if(photo != null){
            newFileName = "Original_" + Path.GetFileName(photo.FileName);
            imagePath = @"images\" + newFileName;
            photo.Save(@"~\" + imagePath);

            newFileName = "Thumbnail_" + Path.GetFileName(photo.FileName);
            imagePath = @"images\" + newFileName;
            photo.Resize(width: 60, height: 60, preserveAspectRatio: true, preventEnlarge: true);
            photo.Save(@"~\" + imagePath);        
        }
    }
}

<!DOCTYPE html>

<html>
<head>
   <title>Resizing Image</title>
</head>

<body>

    <h1>Thumbnail Image</h1>
    <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend> Creating Thumbnail Image </legend>

            <label for="Image">Image</label>
            <input type="file" name="Image" />
            <br/>
            <input type="submit" value="Submit" />
        </fieldset>
    </form>

</body>
</html>

任何想法为什么它不适合更大的图像。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:8)

Microsoft的WebImage类真的真的很差。在阅读了源代码并发现前两页或三页中的~10个关键错误之后,我放弃了它。它不是服务器安全的。

我的imageresizing.net library旨在在服务器上运行,并更好地管理内存。对于SLR照片,您仍然需要大约100-200MB的RAM来解压缩单个图像,但如果您有这样的话,它应该可靠地完成工作。它已成功用于千兆像素大小的图像,因此只要你有一茶匙的RAM,你的单反就会简单

Here's an example of how to upload, resize, and save与图书馆。使用上传的文件名是一个非常大的漏洞 - GUID是一个更安全的选择。

但是,由于库非常快,并且旨在支持单源映像,您可以考虑保存原始文件,并动态生成缩略图。 DiskCache plugin会将它们作为静态文件缓存到磁盘,由IIS提供 - 它提供了出色的性能。