From dab67caca70772ac269f0a9c8e4174ff03573376 Mon Sep 17 00:00:00 2001 From: LegionMammal978 Date: Tue, 6 Aug 2024 15:45:00 -0400 Subject: [PATCH] Add option for Zopfli iteration count --- src/cli.rs | 11 +++++++++++ src/main.rs | 12 +++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 3c06c766..e3d9c72d 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -337,6 +337,17 @@ Recommended use is with '-o max' and '--fast'.") .long("zopfli") .action(ArgAction::SetTrue), ) + .arg( + Arg::new("iterations") + .help("Number of Zopfli iterations") + .long_help("\ +Set the number of iterations to use for Zopfli compression. Using fewer iterations may \ +speed up compression for large files. This option requires '--zopfli' to be set.") + .long("zi") + .default_value("15") + .value_parser(1..=255) + .requires("zopfli"), + ) .arg( Arg::new("timeout") .help("Maximum amount of time to spend on optimizations") diff --git a/src/main.rs b/src/main.rs index 33b793a7..5826d292 100644 --- a/src/main.rs +++ b/src/main.rs @@ -324,12 +324,14 @@ fn parse_opts_into_struct( opts.strip = StripChunks::Safe; } + #[cfg(feature = "zopfli")] if matches.get_flag("zopfli") { - #[cfg(feature = "zopfli")] - if let Some(iterations) = NonZeroU8::new(15) { - opts.deflate = Deflaters::Zopfli { iterations }; - } - } else if let (Deflaters::Libdeflater { compression }, Some(x)) = + let iterations = *matches.get_one::("iterations").unwrap(); + opts.deflate = Deflaters::Zopfli { + iterations: NonZeroU8::new(iterations as u8).unwrap(), + }; + } + if let (Deflaters::Libdeflater { compression }, Some(x)) = (&mut opts.deflate, matches.get_one::("compression")) { *compression = *x as u8;