關於.net在生成壓縮圖片時的2種方法的效果比較

圖片在上傳時要根據圖片大小來生成對應的各種大小的小圖,比如傳760PX的圖片,則分別要多生成300,100寬

度的圖片。於是查看了GDI的功能,~~ 平時用得不多,生疏啊。。

實現方法有2個方式:

1。使用Image的GetThumbnailImage 方法直接生成壓縮圖片,大概大概如此:

   //設置 原圖片 對象的 EncoderParameters 對象,設置清晰度
   ImageCodecInfo ici = GetCodecInfo((string)htmimes[mFileExtName]);
   EncoderParameters parameters = new EncoderParameters(1);
   parameters.Param[0] = new EncoderParameter(Encoder.Quality,lngDefinition);

   System.Drawing.Image.GetThumbnailImageAbort myCallback =new

System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
   System.Drawing.Image myThumbnail = image.GetThumbnailImage(intNewWidth, intNewHeight,

myCallback, IntPtr.Zero);
  myThumbnail.Save(txtNewPath, ici, parameters);

2。使用Graphics 重新繪製圖象
   ImageCodecInfo ici = GetCodecInfo((string)htmimes[mFileExtName]);
   EncoderParameters parameters = new EncoderParameters(1);
   parameters.Param[0] = new EncoderParameter(Encoder.Quality,lngDefinition);

   Bitmap objNewBitMap = new Bitmap(intNewWidth, intNewHeight,

PixelFormat.Format32bppArgb);
   //從指定的 Image 對象創建新 Graphics 對象
   Graphics objGraphics = Graphics.FromImage(objNewBitMap);
   //清除整個繪圖面並以透明背景色填充
   objGraphics.Clear(Color.Transparent);
   //在指定位置並且按指定大小繪製 原圖片 對象
   objGraphics.DrawImage(image, new Rectangle(0, 0, intNewWidth,

intNewHeight));
   objNewBitMap.Save(txtNewPath + txtNewFileName+"."+mFileExtName, ici,

parameters);

注意lngDefinition是調整清晰度的LONG型參數,

一般50-90 就很清晰了。
因爲在使用的時候先是用第一種方法,結果發現把清晰度調得再高都很模糊,後來用第2種方法,發現清晰度爲

 

40的時候也很清晰。
小結下吧:
1。2種效果,在清晰度上是Graphics 勝出
2。在生成同樣寬度,同樣清晰度前提下,圖片Graphics繪製的也比較小,小1/3左右。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章