在程序中直接生成的jpg圖像,漢字有毛邊,經過一番搜索,在msdn上發現了下面控制jpg質量系數的文章,修改後試了一下,效果確實比前面強多了。原理我也不大懂,把代碼貼出來,與大家共享。
聯合圖像專家組 (JPEG) 文件中的壓縮由一組 quantization 表控制。 通常,會有兩個表在每個文件: 一個用於亮度 (亮度) 信息,另一個用於 chrominance (顏色) 信息。 這些表是確定的離散的余弦值為 8x8 塊 quantized 方式的 8x8 矩陣。
JPEG 質量系數用於生成一對 quantization 表。 許多應用程序基於獨立 JPEG 組 (IJG) 代碼的生成相同的 quantization 表,為 IJG 引用代碼。 但是,一些應用程序可能而是使用自定義 quantization 表。
JPEG 編碼器 System.Drawing 中提供的編碼器參數設置 JPEG 質量系數保存 JPEG 文件。 此編碼器參數符合的 1 到 100 范圍使用整數的約定。 此編碼器參數的值將影響創建和使用 quantization 表與建議的質量系數。
具體代碼如下:
System.Drawing.Image newimage = System.Drawing.Image.FromFile("c:\00.jpg");
Bitmap bt = new Bitmap(newimage);
Graphics g = Graphics.FromImage(bt);
(中間略去在畫布上繪圖的代碼)
string lujing = @"c:1.jpg";
//處理JPG質量的函數
int level = 100; //圖像質量 1-100的范圍
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}
EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)level);
bt.Save(lujing, ici, ep);
//釋放位圖緩存
bt.Dispose();