diff --git a/src/lib.rs b/src/lib.rs index fa14a8a8..09fa4100 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -455,8 +455,6 @@ fn optimize_png( opts: &Options, deadline: Arc, ) -> PngResult> { - let original_png = png.clone(); - // Print png info let file_original_size = original_data.len(); let idat_original_size = png.idat_data.len(); @@ -481,6 +479,10 @@ fn optimize_png( info!(" IDAT size = {} bytes", idat_original_size); info!(" File size = {} bytes", file_original_size); + // Do this first so that reductions can ignore certain chunks such as bKGD + perform_strip(png, opts); + let stripped_png = png.clone(); + // Must use normal (lazy) compression, as faster ones (greedy) are not representative let eval_compression = 5; let eval_filters = indexset! {RowFilter::None, RowFilter::MinSum}; @@ -592,14 +594,12 @@ fn optimize_png( png.idat_data.len() ); } else if eval_filter.is_some() { - *png = original_png; + *png = stripped_png; } } else if png.idat_data.len() >= idat_original_size { - *png = original_png; + *png = stripped_png; } - perform_strip(png, opts); - let output = png.output(); if idat_original_size >= png.idat_data.len() {