parent
9d48ae911e
commit
675a28ee32
3 changed files with 15 additions and 7 deletions
13
src/lib.rs
13
src/lib.rs
|
|
@ -159,8 +159,11 @@ pub fn optimize(filepath: &Path, opts: &Options) -> Result<(), String> {
|
|||
|
||||
for result in results {
|
||||
if let Ok(ok_result) = result.join() {
|
||||
if ok_result.4.len() < png.idat_data.len() ||
|
||||
(best.is_none() && something_changed) {
|
||||
if (best.is_some() && ok_result.4.len() < best.clone().unwrap().4.len()) ||
|
||||
(best.is_none() &&
|
||||
(ok_result.4.len() < png.idat_data.len() ||
|
||||
opts.interlace != Some(png.ihdr_data.interlaced) ||
|
||||
opts.force)) {
|
||||
best = Some(ok_result);
|
||||
}
|
||||
}
|
||||
|
|
@ -242,12 +245,14 @@ pub fn optimize(filepath: &Path, opts: &Options) -> Result<(), String> {
|
|||
println!(" file size = {} bytes ({} bytes = {:.2}% decrease)",
|
||||
output_data.len(),
|
||||
file_original_size - output_data.len(),
|
||||
(file_original_size - output_data.len()) as f64 / file_original_size as f64 * 100f64);
|
||||
(file_original_size - output_data.len()) as f64 / file_original_size as f64 *
|
||||
100f64);
|
||||
} else {
|
||||
println!(" file size = {} bytes ({} bytes = {:.2}% increase)",
|
||||
output_data.len(),
|
||||
output_data.len() - file_original_size,
|
||||
(output_data.len() - file_original_size) as f64 / file_original_size as f64 * 100f64);
|
||||
(output_data.len() - file_original_size) as f64 / file_original_size as f64 *
|
||||
100f64);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -263,7 +263,9 @@ impl PngData {
|
|||
output.append(&mut ihdr_data);
|
||||
output.write_u32::<BigEndian>(crc).ok();
|
||||
// Ancillary headers
|
||||
for (key, header) in self.aux_headers.iter().filter(|&(ref key, _)| !(**key == "bKGD" || **key == "hIST" || **key == "tRNS")) {
|
||||
for (key, header) in self.aux_headers.iter().filter(|&(ref key, _)| {
|
||||
!(**key == "bKGD" || **key == "hIST" || **key == "tRNS")
|
||||
}) {
|
||||
let mut header_data = Vec::with_capacity(header.len() + 4);
|
||||
header_data.extend(key.as_bytes());
|
||||
header_data.extend_from_slice(header);
|
||||
|
|
@ -306,7 +308,9 @@ impl PngData {
|
|||
output.write_u32::<BigEndian>(crc).ok();
|
||||
}
|
||||
// Special ancillary headers that need to come after PLTE but before IDAT
|
||||
for (key, header) in self.aux_headers.iter().filter(|&(ref key, _)| **key == "bKGD" || **key == "hIST" || **key == "tRNS") {
|
||||
for (key, header) in self.aux_headers.iter().filter(|&(ref key, _)| {
|
||||
**key == "bKGD" || **key == "hIST" || **key == "tRNS"
|
||||
}) {
|
||||
let mut header_data = Vec::with_capacity(header.len() + 4);
|
||||
header_data.extend(key.as_bytes());
|
||||
header_data.extend_from_slice(header);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ use std::path::PathBuf;
|
|||
fn get_opts(input: &Path) -> oxipng::Options {
|
||||
let mut filter = HashSet::new();
|
||||
filter.insert(0);
|
||||
filter.insert(5);
|
||||
let mut compression = HashSet::new();
|
||||
compression.insert(9);
|
||||
let mut memory = HashSet::new();
|
||||
|
|
|
|||
Loading…
Reference in a new issue