我的目标是在图像超过一定高度或宽度时调整图像大小,保持相同的宽高比。这是我到目前为止所得到的:
static public Stream ScaleImage(HttpPostedFileBase imageFile)
{
Stream stream = new MemoryStream();
var maxWidth = 500;
var maxHeight = 500;
var image = Image.FromStream(imageFile.InputStream, true, true);
if (image.Width > maxWidth || image.Height > maxHeight)
{
// something in here is broken
var ratioX = (double)maxWidth / image.Width;
var ratioY = (double)maxHeight / image.Height;
var ratio = Math.Min(ratioX, ratioY);
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(image, newWidth, newHeight);
Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
Bitmap bmp = new Bitmap(newImage);
bmp.Save(stream, ImageFormat.Jpeg);
stream.Close();
}
else
{
// this works fine
image.Save(stream, ImageFormat.Jpeg);
stream.Close();
}
return stream;
}
如果图像低于最大尺寸,则可以正常工作。但如果需要调整大小,那么由于某种原因我无法发现,返回的Stream充满了错误:
答案 0 :(得分:1)
我用这个替换了代码的底部部分,它为我工作:
bmp.Save(stream, ImageFormat.Jpeg);
}
else
{
image.Save(stream, ImageFormat.Jpeg);
}
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
关闭MemoryStream会导致您看到的Disposed错误。我不确定为什么第二种方法似乎能正常工作。