如何在ASP.NET应用程序中高效地缩放和裁剪图像?
我们的ASP.NET应用程序存在问题,该应用程序允许用户上载和裁剪图像。之后,图像都会缩放到固定大小。当处理一个大文件时,我们基本上会耗尽内存;似乎JPEG的处理效率相当低——我们使用的是System.Drawing.BitMap。您是否有一些一般性的建议,或者一些关于更有效的图像处理库的建议?您有哪些经验?您可能有堆栈跟踪需要查看吗 我还做了一些图像编辑后,用户上传了一个图像。我遇到的唯一问题是浏览器上文件上传大小的限制和超时。但与.Net的库无关如何在ASP.NET应用程序中高效地缩放和裁剪图像?,asp.net,image,Asp.net,Image,我们的ASP.NET应用程序存在问题,该应用程序允许用户上载和裁剪图像。之后,图像都会缩放到固定大小。当处理一个大文件时,我们基本上会耗尽内存;似乎JPEG的处理效率相当低——我们使用的是System.Drawing.BitMap。您是否有一些一般性的建议,或者一些关于更有效的图像处理库的建议?您有哪些经验?您可能有堆栈跟踪需要查看吗 我还做了一些图像编辑后,用户上传了一个图像。我遇到的唯一问题是浏览器上文件上传大小的限制和超时。但与.Net的库无关 有些别的事情要考虑。如果您正在处理多个图像或
有些别的事情要考虑。如果您正在处理多个图像或在某个位置有一些危险的循环,那么您是否确保刷新()和处置()对象。我也遇到了同样的问题,解决方法是使用System.Drawing.Graphics进行转换,并在处理完每个位图对象后立即处置它。以下是我的库中的一个示例(调整大小):
我突然想到了几个想法-
System.Drawing.Bitmap
class,是吗
记得把它处理掉
正确地我们发现系统的主要原因之一。在我们的共享托管平台上,OutOfMemoryException
异常是用户没有正确处理位图
对象Kev在.net中有一个旧的bug,所有图像默认为每像素32位-在这个大小下,您可以很快耗尽内存。请使用PixelFormat结构以确保您的问题不会出现这种情况 此链接可能会有所帮助:我找到了它,它非常棒。和良好的API。效果很好。 从Visual studio 2010扩展管理器下载: 在VS-2010中下载API的简单步骤: 1) 。安装扩展。
3). 查找并安装ImageResizing
4) 。然后编码:(我在这里使用裁剪。您可以使用任何)有关imageresizing.net的文档
试试看!!!它非常简单易用。谢谢。我做的图像裁剪和缩放与此类似。关键的一点是将代码放在“using”语句中,一旦您离开using块的分数,它就会自动处理资源。否则,您将无法处理图像数据==浪费内存。+1用于处理。我看到我们的客户总是忘记/不知道该怎么做。不过,你应该检查一下你的代码-这可能不是你遇到的唯一一个。我建议使用库-它可以正确处理内存使用,并使您从手动操作中解脱出来,这也是MS警告ASP.NET应用程序中不要使用System.Drawing的原因。的可能重复
public Bitmap ApplyTo(Bitmap bitmap)
{
using (bitmap)
{
Bitmap newBitmap = new Bitmap(bitmap, CalculateNewSize(bitmap));
using (Graphics graphics = Graphics.FromImage(newBitmap))
{
graphics.SmoothingMode =
SmoothingMode.None;
graphics.InterpolationMode =
InterpolationMode.HighQualityBicubic;
graphics.CompositingQuality =
CompositingQuality.HighQuality;
graphics.DrawImage(
bitmap,
new Rectangle(0, 0, newBitmap.Width, newBitmap.Height));
}
return newBitmap;
}
}
string uploadFolder = Server.MapPath(Request.ApplicationPath + "images/");
FileUpload1.SaveAs(uploadFolder + FileUpload1.FileName);
//The resizing settings can specify any of 30 commands.. See http://imageresizing.net for details.
ResizeSettings resizeCropSettings = new ResizeSettings("width=200&height=200&format=jpg&crop=auto");
//Generate a filename (GUIDs are safest).
string fileName = Path.Combine(uploadFolder, System.Guid.NewGuid().ToString());
//Let the image builder add the correct extension based on the output file type (which may differ).
fileName = ImageBuilder.Current.Build(uploadFolder + FileUpload1.FileName, fileName, resizeCropSettings, false, true);