您的位置:首页 > 编程语言 > C#

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

2009-11-03 13:07 357 查看
在程序中直接生成的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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: