我要压缩PNG图片
我正在使用以下代码:(以下代码对于jpeg,jpg正常工作,但对png无效。
var qualityParam = new EncoderParameter(Encoder.Quality,80);
// PNG image codec
var pngCodec = GetEncoderInfo(ImageFormat.Png);
var encoderParams = new EncoderParameters(1) { Param = { [0] = qualityParam } };
rigImage.Save(imagePath, pngCodec, encoderParams);
private static ImageCodecInfo GetEncoderInfo(ImageFormat format)
{
// Get image codecs for all image formats
var codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
return codecs.FirstOrDefault(t => t.FormatID == format.Guid);
}
答案 0 :(得分:1)
JPEG“效果很好”,因为它总是可以丢弃更多信息。
PNG是一种无损图像压缩格式,因此获得更好的压缩效果会比较棘手,并且存在很高的“低标记”。有诸如PNGOut或OxiPNG之类的工具专门用于优化PNG图像,但是大多数策略在计算上都非常昂贵,因此您的普通图像处理库不会打扰:
如上所述,大多数图像库都不会为此而烦恼,它们会使用内置的zlib / deflate和一些默认过滤器,可能需要几分钟的时间才能使PNG遍历整个优化流程,并且机会将不存在。
答案 1 :(得分:0)
正如@Masklinn所说,PNG是一种无损格式,我认为.NET中的BCL没有可帮助您“优化” PNG大小的API。
相反,您可以使用 libimagequant 库;您可以获得有关此库here以及如何从.NET here来使用它的更多信息。
这是PNGoo所使用的库,在优化项目中的PNG时,我得到了令人印象深刻的结果。
此外,如果您打算在商业项目中使用该库,请记住许可条款,如https://pngquant.org/lib/所示。