C#: 保存JPEG时,即使设置为100%质量,图像质量也会降低。

3

我只是加载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

是否还有其他图像质量设置?

1个回答

4
JPEG是一种有损格式,在每次保存时都会丢失信息。它也特别不擅长压缩锐利的边缘。根据这篇MSDN文章,您已经正确地设置了图像质量。如果您想尝试优化图像质量,可以调整其他设置,但我不知道您是如何得到ScanMethod和RenderMethod的。然而,我认为最好的方法是使用无损格式(PNG,TIFF等)。 更新 看起来这是由于糟糕的GDI+ JPEG编码器造成的。请参见MSDN论坛上的讨论。结论是-使用第三方图像库,有很多免费的选择。

是的,PNG格式保存得很好。但尽管JPEG是有损压缩格式,当我在Photoshop中打开图像并将其保存为JPEG时,结果图像是无瑕疵的(甚至文件大小更小)。这意味着JPEG格式允许更准确地保存图像。我想知道如何做到这一点。 - user1032559
@user1032559 看起来是GDI+有问题。请参考更新和链接。 - Ivailo Karamanolev
我查看了这个工具的源代码 - http://www.codeproject.com/Articles/9727/Image-Processing-Lab-in-C 它使用标准方法保存图像并且运行良好。唯一的区别是它们不使用EncoderParameters。但是当我没有使用这些参数保存图像时,JPEG的整体质量非常低。 - user1032559
如果你想要最好的质量,可以寻找ImageMagick或其他免费的图像处理库。在CodePlex上也有一个C#的JPEG编码器。我分享你的经验,当你省略EncoderParameters时,质量还可以,但我不确定为什么以及是否总是这种情况。 - Ivailo Karamanolev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接