C#提高保存jpg图像的质量

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值