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();
联合图像专家组 (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();
相关文章推荐
- C#提高保存jpg图像的质量
- 用ImageMagick转换缩小JPG图像提高图像质量的方法
- C#图像处理(5):无损保存图片
- C# 如何用摄像头抓取图像,如何把图像保存到硬盘
- 【Unity】Effective C#观后感之提高Unity中C#代码质量的21条准则
- C# 保存图像文件到SQL SERVER数据库,再读取该文件并显示
- 使用开源jpeg库保存jpg图像
- C# 截取屏幕图像并保存
- C#使用GDAL将tif图像转换为jpg、bmp、png和gif格式的图像
- C#中按指定质量保存图片的实例代码 24位深度
- 文档拍摄技巧之拍照与如何提高图像质量
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
- c#,保存图像为Icon
- 使用LibJpg保存JPG图像或数据
- 在Asp.net中为图像加入水印信息并保存为Jpg类型
- 将 C# 的图像对象保存到 Oracle BLOB 字段中
- VC保存和显示数据库图像(JPG、JPEG)