2013-05-04 95 views
3

我只是加载JPEG图像并将其保存,无需任何操作。但图像质量明显降低。c#:在以100%质量保存JPEG时降低图像质量

下面是代码:

Bitmap imgOutput = new Bitmap(@"D:\image.jpg"); 
Graphics outputGraphics = Graphics.FromImage(imgOutput);  

EncoderParameters myEncoderParameters = new EncoderParameters(3); 
myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 
myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodInterlaced); 
myEncoderParameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderProgressive); 

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 
ImageCodecInfo ici = null; 
foreach (ImageCodecInfo codec in codecs) 
{ 
    if (codec.MimeType == "image/jpeg") 
     ici = codec; 
} 

imgOutput.Save(@"D:\result.jpg", ici, myEncoderParameters); 

而且我得到什么:http://i.imgur.com/5bG1tPM.jpg变焦:http://i.imgur.com/vdx8sL5.jpg

有另一种图像质量设置?

回答

4

JPEG是一种有损格式,每次保存都会导致丢失。压缩锐利边缘也特别不利。根据this MSDN article,您正确设置图像质量。如果您想尝试优化图像质量,可以使用其他设置进行播放,因为我不知道如何使用ScanMethod和RenderMethod。然而,我认为最好的方式是使用无损格式(PNG,TIFF等)。

更新

看来,这是由于糟糕的GDI + JPEG编码器。更多关于the MSDN forums。结论是 - 使用第三方图像库,那里有很多免费的图像库。

+0

是的,PNG节省很多。但尽管JPEG是有损格式,但当我在Photoshop中打开图像并将其另存为JPEG时,结果图像完美无瑕(甚至文件较小)。这意味着JPEG格式允许保存图像更加正确。我想知道如何) – user1032559 2013-05-04 11:43:10

+0

@ user1032559它似乎是GDI +,这是不好的。查看更新和链接。 – 2013-05-04 14:06:38

+0

我查看了这个工具的源代码 - http://www.codeproject.com/Articles/9727/Image-Processing-Lab-in-C它以非标准方法保存图像,效果很好。唯一的区别是它们不使用EncoderParameters。但是,当我保存没有这些参数的图像时,JPEG的总体质量非常低。 – user1032559 2013-05-06 08:03:41