diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a67e3b2..d5dc5a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ **Version 0.6.1 (unreleased)** - Minor compression improvement on interlaced images + - Performance optimizations **Version 0.6.0** - Fix issue where output directory would not be created if it did not exist diff --git a/Cargo.toml b/Cargo.toml index 3c5ae8d0..6c0ef8c1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,9 @@ name = "oxipng" path = "src/main.rs" doc = false +[profile.release] +debug = true + [dependencies] bit-vec = "^0.4.2" byteorder = "^0.5.0" diff --git a/src/png.rs b/src/png.rs index 16e245ad..5c307496 100644 --- a/src/png.rs +++ b/src/png.rs @@ -1081,13 +1081,14 @@ fn filter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8]) -> Vec } } 2 => { - for (i, byte) in data.iter().enumerate() { - if last_line.is_empty() { - filtered.push(*byte); - } else { - filtered.push(byte.wrapping_sub(last_line[i])); - }; - } + if last_line.is_empty() { + filtered.extend_from_slice(data); + } else { + filtered.extend_from_slice(&data.iter() + .zip(last_line.iter()) + .map(|(cur, last)| cur.wrapping_sub(*last)) + .collect::>()); + }; } 3 => { for (i, byte) in data.iter().enumerate() {