diff --git a/src/reduction/color.rs b/src/reduction/color.rs index 5284c94e..2ada69de 100644 --- a/src/reduction/color.rs +++ b/src/reduction/color.rs @@ -3,7 +3,7 @@ use crate::headers::IhdrData; use crate::png::PngImage; use indexmap::IndexMap; use itertools::Itertools; -use rgb::{FromSlice, RGB8, RGBA8}; +use rgb::{FromSlice, RGB8, RGBA, RGBA8}; use rustc_hash::FxHasher; use std::hash::{BuildHasherDefault, Hash}; @@ -105,7 +105,7 @@ where } #[must_use] -pub fn reduced_color_to_palette(png: &PngImage) -> Option { +pub fn reduce_to_palette(png: &PngImage) -> Option { if png.ihdr.bit_depth != BitDepth::Eight { return None; } @@ -131,6 +131,17 @@ pub fn reduced_color_to_palette(png: &PngImage) -> Option { &mut palette, &mut raw_data, ) + } else if png.ihdr.color_type == ColorType::GrayscaleAlpha { + reduce_scanline_to_palette( + line.data.as_gray_alpha().iter().cloned().map(|px| RGBA { + r: px.0, + g: px.0, + b: px.0, + a: px.1, + }), + &mut palette, + &mut raw_data, + ) } else { debug_assert_eq!(png.ihdr.color_type, ColorType::RGBA); reduce_scanline_to_palette( diff --git a/src/reduction/mod.rs b/src/reduction/mod.rs index 0c56b89c..d261549a 100644 --- a/src/reduction/mod.rs +++ b/src/reduction/mod.rs @@ -206,14 +206,14 @@ pub fn reduce_color_type(png: &PngImage, grayscale_reduction: bool) -> Option Option