From 7303b94afc72559ed62ea4eb6144961cf76ec49e Mon Sep 17 00:00:00 2001 From: Josh Holmer Date: Fri, 27 Jul 2018 23:03:36 -0400 Subject: [PATCH] Fix issue with alpha optim on interlaced images Closes #113 --- CHANGELOG.md | 3 +++ src/png/mod.rs | 8 ++++++-- tests/files/issue-113.png | Bin 0 -> 16280 bytes tests/regression.rs | 20 ++++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 tests/files/issue-113.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e7686d7..0807932b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### Version 2.0.2 + - Fix an issue in alpha optimization on interlaced images ([#113](https://github.com/shssoichiro/oxipng/issues/113)) + ### Version 2.0.1 - Revert making Cloudflare zlib the default, as it introduced a major memory leak. It will be put back behind a feature flag, and reenabled when the issue is fixed. diff --git a/src/png/mod.rs b/src/png/mod.rs index 72a2b06e..c17b7215 100644 --- a/src/png/mod.rs +++ b/src/png/mod.rs @@ -713,10 +713,14 @@ impl PngData { fn reduce_alpha_to_up(&self, bpc: usize, bpp: usize) -> Vec { let mut lines = Vec::new(); - let scan_lines = self.scan_lines().collect::>(); + let scan_lines = self.scan_lines() + .collect::>() + .into_iter() + .rev() + .collect::>(); let mut last_line = vec![0; scan_lines[0].data.len()]; let mut current_line = Vec::with_capacity(last_line.len()); - for line in scan_lines.into_iter().rev() { + for line in scan_lines.into_iter() { current_line.push(line.filter); for (pixel, last_pixel) in line.data.chunks(bpp).zip(last_line.chunks(bpp)) { if pixel.iter().skip(bpp - bpc).fold(0, |sum, i| sum | i) == 0 { diff --git a/tests/files/issue-113.png b/tests/files/issue-113.png new file mode 100644 index 0000000000000000000000000000000000000000..a039b00b67745fe940532a0d99ce02301d6352ab GIT binary patch literal 16280 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 SPyT%?FDIoeStV`~^#1_5tmZiY literal 0 HcmV?d00001 diff --git a/tests/regression.rs b/tests/regression.rs index 0175cb99..8ccfa6c6 100644 --- a/tests/regression.rs +++ b/tests/regression.rs @@ -289,3 +289,23 @@ fn issue_92_filter_5() { BitDepth::Eight, ); } + +#[test] +fn issue_113() { + let input = "tests/files/issue-113.png"; + let (_, mut opts) = get_opts(Path::new(input)); + opts.interlace = Some(1); + opts.alphas = HashSet::new(); + opts.alphas.insert(AlphaOptim::Up); + let output = OutFile::Path(Some( + Path::new(input).with_extension("-f5-out.png").to_owned(), + )); + test_it_converts( + input, + Some((output, opts)), + ColorType::RGBA, + BitDepth::Eight, + ColorType::GrayscaleAlpha, + BitDepth::Eight, + ); +}