2011-05-17 56 views
1

所以我需要一些调整大小。帮助图像大小调整方法gdi

我发现了两种不同的方法。

一个看起来是这样的:

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; 
    } 

我基本上是 '借' 两种方法,而只是改变的点点滴滴。

但是 - 使用第一个,每当我调整到一个小一点的图片,文件的大小实际上是更大的,则原

而且大大提高了第二,而尺寸看起来很可怕:/(!?)

我当然倾向于仅仅用第一种方法改善图像质量,如果可能的话,但我看不出来,从我的角度看,一切看起来都是“高质量”的?

回答

1

您可能需要设置JPEG压缩级别。目前它可能会保存在一个非常高的质量水平,这可能不是你想要的。

这里看到更多的信息:http://msdn.microsoft.com/en-us/library/bb882583.aspx

但是请注意,这只是降低了图像的分辨率并不一定会减少文件大小。由于压缩的工作原理,由于插值模式而变得模糊的较小分辨率的文件可能会比原始文件大得多,但是由于有损算法,JPEG可能不是一个大问题。不过,如果原始文件之前非常简单(比如“平面”网页或简单的矢量图形),并且在调整大小后模糊不清,它可以对PNG产生巨大影响。

1

不管文件大小的问题,我肯定会推荐使用第一种方法,而不是使用GetThumbnailImage

GetThumbnailImage实际上会从源图像中提取嵌入的缩略图(如果存在)。不幸的是,这意味着如果您不预期并考虑嵌入式缩略图,则可能会从某些未知的原始文件大小和质量(与原始文件相比)中缩放。这也意味着一次运行(使用嵌入的缩略图)会比另一次运行(没有嵌入的缩略图)获得非常不同的质量结果。

我已经多次使用类似于您的第一种方法的东西,虽然我偶尔看到了您所看到的内容,但结果一直更好。