如何在ASP.NET(使用C#)应用程序中以可优化的方式调整图像大小
本文关键字:优化 方式 调整 图像 应用程序 ASP NET 使用 | 更新日期: 2023-09-27 18:28:17
我用C#编写了这段代码:
int maxSideSize = 125;
MemoryStream memory = new MemoryStream( File.ReadAllBytes( Path.GetFullPath( "test1.png" ) ) );
Image img = Image.FromStream( memory );
//Determine image format
ImageFormat fmtImageFormat = img.RawFormat;
//get image original width and height
int intOldWidth = img.Width;
int intOldHeight = img.Height;
//determine if landscape or portrait
int intMaxSide;
if ( intOldWidth >= intOldHeight ) {
intMaxSide = intOldWidth;
} else {
intMaxSide = intOldHeight;
}
if ( intMaxSide > maxSideSize ) {
//set new width and height
double percent = maxSideSize / (double)intMaxSide;
intNewWidth = Convert.ToInt32( percent * intOldWidth );
intNewHeight = Convert.ToInt32( percent * intOldHeight );
} else {
intNewWidth = intOldWidth;
intNewHeight = intOldHeight;
}
//create new bitmap
Bitmap bmpResized = new Bitmap( img, intNewWidth, intNewHeight );
//save bitmap to disk
string path = Path.Combine( "C:''Temp", test1.png" ) );
bmpResized.Save( memory, fmtImageFormat );
img.Save( path );
//release used resources
img.Dispose();
bmpResized.Dispose();
} catch (Exception e) {
Console.Write( e.Message );
}
上面的代码是否可以针对ASP.NET应用程序进行优化?
我认为,如果1000名用户连接到我的网站,其中20%的用户上传的图像超过125px(宽度和高度),那么应用程序可能会崩溃。
我的朋友建议使用Canvas或Drawing2D库。如果已经存在一个文件,会发生什么?是否可以覆盖?
抱歉问了这个愚蠢的问题。在这种情况下,我需要建议。
20%的用户不太可能在同一秒内上传图像。当然,你应该确保在上传图像时调整图像大小,而不是在提供图像时。更重要的是,如果你的服务器不能完成这项工作,它不会崩溃,但会将用户放入队列,这将导致响应时间变慢。
请记住,如果你让匿名用户上传图片,你可能会成为DOS攻击的对象,再多的优化也无法阻止。您应该添加主动检查上传是否合法的代码,并在出现问题时阻止新的上传。
最后,如果代码真的是你所描述的,你根本不需要内存流,你可以在创建位图时直接从文件中读取,在保存位图时直接保存到文件中。
您可以用这个构造函数重载加载文件,并用这个save方法重载
您可以使用这个nuget包http://nuget.org/packages/Simple.ImageResizer
如何使用:https://github.com/terjetyl/ImageResizer
我使用了wpf类,它应该比旧的System.Drawing类在内存方面更友好。
在上传文件时点击按钮:
System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(File1.PostedFile.InputStream);
System.Drawing.Image objImage = ScaleImage(bmpPostedImage, 81);
objImage.Save(SaveLocation,ImageFormat.Png);
lblmsg.Text = "The file has been uploaded.";
public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxHeight)
{
var ratio = (double)maxHeight / image.Height;
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(newWidth, newHeight);
using (var g = Graphics.FromImage(newImage))
{
g.DrawImage(image, 0, 0, newWidth, newHeight);
}
return newImage;
}
更多详细信息点击此处
http://satindersinght.blogspot.in/2012/08/how-to-resize-image-while-uploading-in.html