????? 在程序中直接生成的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();