我正在调整asp.net中的图像。我成功调整了图像大小。但是将其转换为流 .jpg图片不起作用。
这是我的代码 如果我将图像格式设置为jpeg它不起作用。因为在C#中没有.jpg的图像格式
public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxWidth, int maxHeight)
{
var width=image.Width;
var height=image.Height;
var newWidth=0;
var newHeight=0;
var divisor=0;
if (width > height) {
newWidth = maxWidth;
divisor = width / maxWidth;
if (divisor == 0)
{
divisor = 1;
}
newHeight = Convert.ToInt32(height /divisor);
}
else {
newHeight = maxHeight;
divisor = height / maxHeight;
if (divisor == 0)
{
divisor = 1;
}
newWidth = Convert.ToInt32(width / divisor);
}
var newImage = new Bitmap(newWidth, newHeight);
Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
return newImage;
}
public static Stream ToStream(this System.Drawing.Image image, ImageFormat formaw)
{
var stream = new System.IO.MemoryStream();
//stream.ReadTimeout = 100000;
image.Save(stream, formaw);
stream.Position = 0;
//stream.ReadTimeout = 100000;
return stream;
}
答案 0 :(得分:1)
如果在ASP.NET服务中使用,必须显式处理所有System.Drawing
类。 这不是可选的。您将以任何大量流量使服务器崩溃。
目前,您的代码依赖于GC来取消分配Graphics
和Bitmap
实例。不幸的是,GC将这两个对象视为微小的低优先级对象,并且不知道它们实际上占用了100多MB的RAM。
以下是一些如何安全地进行图像大小调整以及质量更好的示例:
它是麻省理工学院许可的,所以不用担心使用限制。
答案 1 :(得分:0)
您正在寻找的ImageFormat是ImageFormat.Jpeg。