parent
7895e42687
commit
bb1737928e
4 changed files with 34 additions and 0 deletions
|
|
@ -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
|
### Version 2.1.1
|
||||||
- More fixes for alpha optimization on interlaced images ([#133](https://github.com/shssoichiro/oxipng/issues/133))
|
- More fixes for alpha optimization on interlaced images ([#133](https://github.com/shssoichiro/oxipng/issues/133))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 reduced = Vec::with_capacity(png.raw_data.len());
|
||||||
let mut palette = Vec::with_capacity(256);
|
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;
|
let bpp: usize = (3 * png.ihdr_data.bit_depth.as_u8() as usize) >> 3;
|
||||||
for line in png.scan_lines() {
|
for line in png.scan_lines() {
|
||||||
reduced.push(line.filter);
|
reduced.push(line.filter);
|
||||||
|
|
@ -227,6 +234,10 @@ pub fn reduce_rgb_to_palette(png: &mut PngData) -> bool {
|
||||||
png.raw_data = reduced;
|
png.raw_data = reduced;
|
||||||
png.palette = Some(color_palette);
|
png.palette = Some(color_palette);
|
||||||
png.ihdr_data.color_type = ColorType::Indexed;
|
png.ihdr_data.color_type = ColorType::Indexed;
|
||||||
|
if png.transparency_pixel.is_some() {
|
||||||
|
png.transparency_pixel = None;
|
||||||
|
png.transparency_palette = Some(vec![0]);
|
||||||
|
};
|
||||||
true
|
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()) {
|
if let Some(sbit_header) = png.aux_headers.get_mut(&"sBIT".to_string()) {
|
||||||
assert_eq!(sbit_header.len(), 3);
|
assert_eq!(sbit_header.len(), 3);
|
||||||
sbit_header.truncate(1);
|
sbit_header.truncate(1);
|
||||||
|
|
|
||||||
BIN
tests/files/issue-129.png
Normal file
BIN
tests/files/issue-129.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
|
|
@ -410,6 +410,19 @@ fn issue_113_down() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn issue_129() {
|
||||||
|
let input = "tests/files/issue-129.png";
|
||||||
|
test_it_converts(
|
||||||
|
input,
|
||||||
|
None,
|
||||||
|
ColorType::RGB,
|
||||||
|
BitDepth::Eight,
|
||||||
|
ColorType::Indexed,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn issue_133_black() {
|
fn issue_133_black() {
|
||||||
let input = "tests/files/issue-133.png";
|
let input = "tests/files/issue-133.png";
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue