[英]Reduce the size of the PNG image
我想壓縮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);
}
JPEG“工作正常”,因為它總是可以丟棄更多信息。
PNG 是一種無損圖像壓縮格式,因此獲得更好的壓縮更棘手,並且有一個相當高的“低分”。 有像 PNGOut 或 OxiPNG 這樣的工具,它們僅用於優化 PNG 圖像,但大多數策略在計算上非常昂貴,因此您的普通圖像處理庫不會打擾:
如上所述,大多數圖像庫根本不會為此煩惱,他們將使用內置的 zlib/deflate 和一些默認過濾器,使 PNG 通過整個優化管道可能需要幾分鍾的時間,並且有可能獲得收益將不存在。
正如@Masklinn 所說,PNG 是一種無損格式,我認為 .NET 中的 BCL 沒有可以幫助您“優化”PNG 大小的 API。
相反,您可以使用libimagequant庫; 您可以在此處獲得有關此庫的更多信息,以及如何在此處從 .NET 使用它。
這是PNGoo使用的同一個庫,在我的項目中優化 PNG 時,我得到了非常令人印象深刻的結果。
此外,如果您計划在商業項目中使用該庫,請記住許可條款,如https://pngquant.org/lib/ 所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.