C#圖片處理之: 另存爲壓縮質量可自己控制的JPEG

處理圖片時常用的過程是:讀入圖片文件並轉化爲Bitmap -> 處理此Bitmap的每個點以得到需要的效果 -> 保存新的Bitmap到文件
使用C#很方便的就可以把多種格式的圖片文件讀到Bitmap對象中。一句話就夠了,常見的格式都支持,諸如JPEG,BMP,PNG等等。

Bitmap bmp = new Bitmap("文件名");

然後就是怎麼處理這個圖片的問題了,與本案無關,pass。

最後就是保存。JPEG雖然是有損壓縮方案,但是它在縮減文件體積和儘可能好的保留原有信息的矛盾上很好的找到了平衡點,所以在很多情況下成爲首選的保存方案。

C#當然不會無視這一點,Bitmap類提供了默認的另存爲JPEG的方法:

bmp.Save("輸出文件", System.Drawing.Imaging.ImageFormat.Jpeg);

這樣當然很方便,但有時候更在乎文件體積而有時候更在乎圖像質量,是不是有什麼辦法可以讓自己來控制壓縮質量呢?

答案是肯定的,bmp.Save方法中有個重載用到了EncoderParameters參數。我們可以在這個參數中加入自己的控制質量。
/**//// <summary>
/// 保存JPG時用
/// </summary>
/// <param name="mimeType"></param>
/// <returns>得到指定mimeType的ImageCodecInfo</returns>
private static ImageCodecInfo GetCodecInfo(string mimeType)
{
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}


/**//// <summary>
/// 保存爲JPEG格式,支持壓縮質量選項
/// </summary>
/// <param name="bmp"></param>
/// <param name="FileName"></param>
/// <param name="Qty"></param>
/// <returns></returns>
public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty)
{
try
{
EncoderParameter p;
EncoderParameters ps;

ps = new EncoderParameters(1);

p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
ps.Param[0] = p;

bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);

return true;
}
catch
{
return false;
}

}
發佈了43 篇原創文章 · 獲贊 20 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章