我们遇到了一个ASP.NET应用程序问题,该应用程序允许用户上传和裁剪图像。之后,图像都缩放到固定大小。处理大文件时,我们的内存基本耗尽;似乎JPEG的处理效率很低 - 我们使用的是System.Drawing.BitMap。您是否有任何一般性建议,也许还有一些指向更高效图像处理库的指示?你有什么经历?
答案 0 :(得分:4)
我遇到了同样的问题,解决方法是使用System.Drawing.Graphics进行转换,并在完成后立即处理每个位图对象。这是我图书馆的一个样本(调整大小):
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;
}
}
答案 1 :(得分:3)
我找到imageresizer并且很棒。和良好的API。效果很好。 从Visual Studio 2010 Extension Manager下载:http://nuget.org/。
在VS-2010中下载API的简单步骤:
1)。安装分机http://nuget.org/。
3)。查找并安装ImageResizing
4)。然后代码:(我在这里使用裁剪。你可以使用任何)imageresizing.net上的文档
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);
尝试!!!它非常棒且易于使用。感谢。
答案 2 :(得分:1)
想到几个想法 -
您允许的图像尺寸 您的用户上传,可以 对此施加限制?
当你使用的时候
System.Drawing.Bitmap
上课,是吗?
记得处理它
是否正确?我们发现,在我们的共享托管平台上System.OutOfMemoryException
例外的主要原因之一是用户没有正确处理Bitmap
个对象。
千电子伏
答案 3 :(得分:1)
.net中存在一个较旧的错误,即所有图像默认为每像素32位 - 在这个尺寸下,您可以非常快地耗尽内存。请使用PixelFormat结构来确保您的问题不是这样。
此链接可能有所帮助:http://msdn.microsoft.com/en-us/library/aa479306.aspx
答案 4 :(得分:1)
CodeProject上有一篇很好的文章。非常好的一个。将尝试找到链接(大约4年后使用它。)
更新:
不是我想要的那个,但看起来也不错。
http://www.codeproject.com/KB/custom-controls/ImageCroppingControl.aspx
答案 5 :(得分:0)
你可能有一个堆栈跟踪要看吗?
我在用户上传图片后也做了一些图片编辑。我遇到的唯一问题是对浏览器和超时的文件上传大小的限制。但与.Net的库无关。
要考虑的其他事项。如果你正在做多个图像或者在某个地方有一些危险的循环,那么你是否确保flush()和dispose()的东西。