c# GDI+改变图片保存时的质量

本文介绍如何通过设置ImageCodecInfo和EncoderParameters类改进JPEG图片的保存质量。利用System.Drawing.Imaging.Encoder类可调整图片质量参数,实现高质量图片输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SmoothingMode.HighQuality,CompositingQuality.HighQuality,TextRenderingHint.ClearTypeGridFit等属性,使得生成的图片质量有所提高.但是默认值不能满足我们的需求.而默认的jpeg保存质量应该是在60左右.这个时候我们需要修改默认值..修改的方法就是设置定义ImageCodecInfo类和EncoderParameters类,具体的代码如下:ImageCodecInfo类则指定需要保存的格式,EncoderParameters则是EncoderParameter类的集合数组,在EncoderParameter类中使用System.Drawing.Imaging.Encoder类来制定需要呈现的方式和各种参数,例如图片质量参数,扫描方法参数,色度表参数,压缩参数,颜色深度等等.到此,大家应该明白修改图片质量的步骤和方法了.主要就是对System.Drawing.Imaging.Encoder设置,然后通过System.Drawing.Imaging.Encoder构造出来EncoderParameter类,将EncoderParameter传递给EncoderParameters数组,从而得到一个完全符合自己意愿的图片!呵呵,说了一大堆.起始代码很简单.如下:
先引入:
using System;
using System.Drawing;
using System.Drawing.Imaging; 


1
2Bitmap myBitmap; //建立位图
3ImageCodecInfo myImageCodecInfo;
4Encoder myEncoder;//这个是重点类,
5EncoderParameter myEncoderParameter;
6EncoderParameters myEncoderParameters;
7myBitmap = new Bitmap( Server.MapPath("a.bmp") );
8//请注意这里的myImageCodecInfo声名..可以修改为更通用的.看后面
9ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
10myEncoder = Encoder.Quality;
11myEncoderParameters = new EncoderParameters(1);
12// 在这里设置图片的质量等级为95L.
13myEncoderParameter = new EncoderParameter(myEncoder, 95L);
14myEncoderParameters.Param[0] = myEncoderParameter;//将构建出来的EncoderParameter类赋给EncoderParameters数组
15myBitmap.Save(Server.MapPath("ok.jpg"), myImageCodecInfo, myEncoderParameters);//保存图片
16myEncoderParameter.Dispose();
17myEncoderParameters.Dispose();
18myBitmap.Dispose();

对于这个ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];的设置,也可以这么写.比较通用:

通过上面的设置,生成的图片效果非常不错,而最重要的是你可以通过增加EncoderParameters数组的维数来做到非常多的效果,比如,给图片整体加亮,减淡等特殊处理..

1private static ImageCodecInfo GetEncoderInfo(String mimeType)
2{
3 int j;
4 ImageCodecInfo[] encoders;
5 encoders = ImageCodecInfo.GetImageEncoders();
6 for(j = 0; j < encoders.Length; ++j)
7 {
8 if(encoders[j].MimeType == mimeType)
9 return encoders[j];
10 }
11 return null;
12}
13
14//调用的时候这么做..
15myImageCodecInfo = GetEncoderInfo("image/jpeg");
16
17//************* 如果想知道ImageCodecInfo中的其他参数,可以做如下循环,得到结果 ******************
18
19int j;
20ImageCodecInfo[] encoders;
21encoders = ImageCodecInfo.GetImageEncoders();
22for(j = 0; j < encoders.Length; ++j)
23{
24 Response.Write( encoders[j].MimeType + "<br>") ;
25}

26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值