2013-09-24 60 views
2

嗨,我是C#中的圖片大小調整並保存爲.png。爲網頁調整高品質圖片的尺寸

public static Bitmap resize(int x, int y, Image p) 
{ 
    Bitmap Img = new Bitmap(x,y); 
    using (Graphics gr = Graphics.FromImage(Img)) 
    { 
     gr.SmoothingMode = SmoothingMode.HighQuality; 
     gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     gr.DrawImage(p, new Rectangle(0, 0, x, y)); 
    } 
    return Img; 
} 

的問題是,當用戶上載的高質量圖像,例如從高端智能手機的圖像,如GALAXYS,iPhone手機等所得到的調整後的圖像的文件大小是相當高的。 我已經構建了調整大小的圖像文件大小和像素大小的表格。

1) Img1 1280 * 666px => 458 kb 
2) Img1 300 * 399px => 221kb 
3) Img2 1280 * 1444px => 2.08mb 
4) Img2 300 * 451px => 327kb 

我知道我有插值和平滑設置爲高質量爲例,並將圖像保存爲.png以保持透明度。但是我應該改變什麼樣的設置來獲得合理質量的圖像和適用於HTML頁面的文件。我的最終目標是在圖像質量和FileSize之間做出妥協。所以請給我一些鏈接展示Filsesize vs Quality比較調整大小圖像的質量,以便我可以自己做出選擇。

+1

你真的必須將照片保存爲.png嗎?爲什麼? – hyde

+0

@hyde它可以是照片或矢量,所以我需要保持透明度。 –

+0

即使有照片,你是否始終保持透明? – hyde

回答

3

有一個選項可以玩,PixelFormat

using (Bitmap bmp = new Bitmap(x, y, 
     System.Drawing.Imaging.PixelFormat.Format32bppArgb)) 
{ 
    using (Graphics gr = Graphics.FromImage(bmp)) 
    { 

     gr.SmoothingMode = SmoothingMode.HighQuality; 
     gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     gr.DrawImage(src, new Rectangle(0, 0, x, y)); 
    } 
} 

只有當您需要alpha通道(例如圖像是透明的)時才使用32位的Argb。您還可以查詢img.PixelFormat以查看圖像是否包含Alpha通道! 在這種情況下,你不必將它保存爲PNG,並可以使用JPG,這將導致很多小文件!

正常jpg通常使用Format24bppRgb