所以我需要一些调整大小。
我发现了两种不同的方法。
一个看起来像这样:
public static Byte[] ResizeImageNew(System.Drawing.Image imageFile, int targetWidth, int targetHeight) {
using(imageFile){
Size newSize = CalculateDimensions(imageFile.Size, targetWidth, targetHeight);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppRgb)) {
newImage.SetResolution(imageFile.HorizontalResolution, imageFile.VerticalResolution);
using (Graphics canvas = Graphics.FromImage(newImage)) {
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(imageFile, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
}
另一个:
public static System.Drawing.Image ResizeImage(System.Drawing.Image originalImage, int width, int maxHeight) {
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
int NewHeight = originalImage.Height * width / originalImage.Width;
if (NewHeight > maxHeight) {
// Resize with height instead
width = originalImage.Width * maxHeight / originalImage.Height;
NewHeight = maxHeight;
}
System.Drawing.Image newImage = originalImage.GetThumbnailImage(width, NewHeight, null, IntPtr.Zero);
return newImage;
}
我基本上'借用'这两种方法,只是改变了点点滴滴。
然而 - 使用第一个,每当我调整到更小的图片时,文件的大小实际上大于原始(!?)
第二个虽然大大改善了尺寸看起来很可怕:/
我当然只是在第一种方法中仅仅提高图像质量,如果可能的话,但是从我的角度来看,我看不出怎样,一切看起来都是“高质量”?
答案 0 :(得分:1)
您可能必须设置JPEG压缩级别。目前,它可能会保存在非常高的质量水平,这可能不是您想要的。
有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/bb882583.aspx
但请注意,仅降低图像的分辨率并不一定会减少文件大小。由于压缩的工作原理,由于插值模式而模糊的较小分辨率文件可能比原始模块大得多,但由于有损算法,JPEG可能不是一个大问题。但是,如果原始文件之前非常简单(如“平面”webcomic或简单的矢量图形),并且在调整大小后模糊不清,它可以为PNG带来巨大的差异。
答案 1 :(得分:1)
无论文件大小问题如何,我肯定会建议使用第一种方法,而不是使用GetThumbnailImage
的方法。
GetThumbnailImage
实际上会从源图像中提取嵌入的缩略图(如果存在)。不幸的是,这意味着如果您没有预料到并考虑到嵌入式缩略图,那么您将从一些未知的原始文件大小和质量(与原始文件相比)进行扩展。这也意味着您将在一次运行(使用嵌入式缩略图)上获得与在另一次运行(没有嵌入式缩略图)时相同的质量结果。
我已经多次使用类似于你的第一种方法的东西,虽然我偶尔看到你看到的东西,结果却一直都好一些。