From bb1737928ec0779a29cb7f5cec09f6167a0e891d Mon Sep 17 00:00:00 2001 From: Josh Holmer Date: Sat, 11 Aug 2018 23:33:55 -0400 Subject: [PATCH] Fix RGB to Indexed reduction if transparency pixel exists Closes #129 --- CHANGELOG.md | 3 +++ src/reduction/color.rs | 18 ++++++++++++++++++ tests/files/issue-129.png | Bin 0 -> 36477 bytes tests/regression.rs | 13 +++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 tests/files/issue-129.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c9c7dc2..d5a1b061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### Version 2.1.2 + - Fix issue with PNG to Indexed reduction on images with transparency pixel ([#129](https://github.com/shssoichiro/oxipng/issues/129)) + ### Version 2.1.1 - More fixes for alpha optimization on interlaced images ([#133](https://github.com/shssoichiro/oxipng/issues/133)) diff --git a/src/reduction/color.rs b/src/reduction/color.rs index 432c100d..a1be2552 100644 --- a/src/reduction/color.rs +++ b/src/reduction/color.rs @@ -169,6 +169,13 @@ pub fn reduce_rgb_to_palette(png: &mut PngData) -> bool { } let mut reduced = Vec::with_capacity(png.raw_data.len()); let mut palette = Vec::with_capacity(256); + if let Some(ref trns) = png.transparency_pixel { + assert_eq!(trns.len(), 6); + if trns[0] != trns[1] || trns[2] != trns[3] || trns[4] != trns[5] { + return false; + } + palette.push(vec![trns[0], trns[2], trns[4]]); + } let bpp: usize = (3 * png.ihdr_data.bit_depth.as_u8() as usize) >> 3; for line in png.scan_lines() { reduced.push(line.filter); @@ -227,6 +234,10 @@ pub fn reduce_rgb_to_palette(png: &mut PngData) -> bool { png.raw_data = reduced; png.palette = Some(color_palette); png.ihdr_data.color_type = ColorType::Indexed; + if png.transparency_pixel.is_some() { + png.transparency_pixel = None; + png.transparency_palette = Some(vec![0]); + }; true } @@ -263,6 +274,13 @@ pub fn reduce_rgb_to_grayscale(png: &mut PngData) -> bool { } } } + if let Some(ref mut trns) = png.transparency_pixel { + assert_eq!(trns.len(), 6); + if trns[0..2] != trns[2..4] || trns[2..4] != trns[4..6] { + return false; + } + *trns = trns[0..2].to_owned(); + } if let Some(sbit_header) = png.aux_headers.get_mut(&"sBIT".to_string()) { assert_eq!(sbit_header.len(), 3); sbit_header.truncate(1); diff --git a/tests/files/issue-129.png b/tests/files/issue-129.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf61e016347d4cfea26d81a285eccb2e1b6f002 GIT binary patch literal 36477 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Ŗk3tHLILC z);(j+B6rMaK+nj`0sZXn>kN<3m#*pc1AShzI&zYg8h5NmJPz)96Om@;>EHWA_GC;K z>wV)vXn-`;sL|l!{HZjM14_2$%s4JW*3<`nHpy4Y{5GHu?i=){!h=YFnyZSiWmFfH z_NeOh?`|`|dSm8}UhT0@`6zRC>=GL6OhCc}@UETC`N z4#lg`PkJ5&|8r(|u%jN$P`Jwk8W;QH`86+LhJmXjGxPhKeaj!^4N|Jz+>GIil^om!%^xYqv+RoiS8vgg* z_Pfj)v4%h|_}Bj4pFXpOaHJi<1ecALVL{zvF0r*q)sy1&>FH}{9|vaGSp64J|9DMQ zL1qXD#&L7^@9tk+Mj(m7*ZuRy(={>;^09vh-0T)}XTn7?G*=5HWKg>Ca4=j1>lN`x ze(p8goaZ*zKvX`a^D%@zKrHgRe|Luk6eMNuY+xPC@?RA^}6WFU7Zs|xS| zE#jo6BpI5W(3mitFQ(SyXFV{j;M@t62!z-+=yk-Rx-$`&@BZEWyYKz?v8sUY-AiBj zA{2>leBKv-&eJ}Q;J$3oIl1I4F$`=`E$O=ACQowG%VyVJb$T6jU?%(|@+N6H8Ns0L z-6p&H_kfY%zW2TTU2g?vWH&)sdcjNo#q)mhJJ<}4yBPa6Ne9RdX1DCzK|u|}GGW&8 zlfU#M=-@GA8I%a8$I}_39xjuZcmM915M)0&Y1L=tS)`Szx=|lc=l%!Bkl9P z=@SWZfx9000-23L@U4e1{L2a*|8hWI4!&8sMt8>*had8DT)qK1I}hO-SyhNO#e>Ym zeE09}-y VS