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

C# ASP.NET网页-使用WebImage调整和保存照片的大小,c#,asp.net,razor,image-resizing,C#,Asp.net,Razor,Image Resizing,我正在使用ASP.NET网页创建一个表单,可以在其中选择图像。然后我想将图像调整为各种不同的大小,以便在我的网站上显示它们 这适用于较小的图像(文件大小),但我想调整大小的图像来自我的数码单反,它们可以大到14MB/jpeg。我得到了以下错误 Maximum request length exceeded. 我用以下代码添加了一个web.config: <?xml version="1.0"?> <configuration> <system.web&

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

这适用于较小的图像(文件大小),但我想调整大小的图像来自我的数码单反,它们可以大到14MB/jpeg。我得到了以下错误

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>

我不再知道错误了,但它实际上什么也没做。它仍然适用于较小的图像

我在这里使用了教程:

我的代码如下:

@{  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>
@{WebImage photo=null;
var newFileName=“”;
var imagePath=“”;
var imageThumbPath=“”;
如果(IsPost){
photo=WebImage.GetImageFromRequest();
如果(照片!=null){
newFileName=“Original”+Path.GetFileName(photo.FileName);
imagePath=@“images\”+新文件名;
照片保存(@“~\”+imagePath);
newFileName=“缩略图”+Path.GetFileName(photo.FileName);
imagePath=@“images\”+新文件名;
照片。调整大小(宽度:60,高度:60,保留AspectRatio:true,防止放大:true);
照片保存(@“~\”+imagePath);
}
}
}
调整图像大小
缩略图
创建缩略图图像
形象


你知道为什么它不适用于更大的图像吗。感谢您的帮助

微软的WebImage类非常非常差。在阅读了源代码并在前两三页中发现了大约10个关键错误后,我放弃了。这不是服务器安全的

My设计为在服务器上运行,并且可以更好地管理内存。对于单反照片,你仍然需要大约100-200MB的内存来解压一张图像,但是如果你有这样的内存,它应该可以非常可靠地完成这项工作。它已经成功地用于千兆像素大小的图像,所以只要你有一茶匙的内存,你的单反就会很容易

和图书馆在一起。使用上传的文件名是一个非常大的漏洞-GUID是一个更安全的选择


然而,由于库是非常快的,并且被设计为支持单源成像,所以您可以考虑只保存原件,并动态生成缩略图。将它们作为静态文件缓存到磁盘,由IIS提供服务-它提供了很好的性能

非常全面的回答。谢谢,谢谢分享。WebImage中的GetBytes()方法有一个奇怪的问题。切换到这个库,它可以直接运行。嗨@计算机语言学家,我想知道你是否可以解释一下你发现的关键错误,以及为什么它“真的很差”?我只是对细节很好奇,所以我避免这样做的理由不仅仅是“因为堆栈上有人这么说”。它会导致各种图像瑕疵(许多结果图像上的黑色/灰色边框、较差的图像合成质量、较差的大小调整质量、较差的结果文件大小.I),但看起来他们没有注意到。看起来一些内存泄漏自2012年以来已得到修复(结果图像(tempImage)除外)如果出现任何类型的异常,则会泄漏)。它在应用图像转换方面仍然非常低效,但代码库不再像以前那样可怕(从稳定性/安全性的角度来看)。尽管重新采样和边界伪影仍然没有借口,但这只是基本的。