From ff168f5d2df39ba22144235b5725d37353f3b7fc Mon Sep 17 00:00:00 2001 From: andrews05 Date: Sun, 25 Jan 2026 00:35:55 +1300 Subject: [PATCH] Add json output option (#761) --- Cargo.lock | 96 ++++++++++++++++++++++++++ Cargo.toml | 47 ++++--------- src/cli.rs | 8 +++ src/evaluate.rs | 2 +- src/lib.rs | 3 +- src/main.rs | 158 +++++++++++++++++++++++++++++++------------ tests/files/json.png | Bin 0 -> 42531 bytes tests/flags.rs | 38 +++++++++++ 8 files changed, 274 insertions(+), 78 deletions(-) create mode 100644 tests/files/json.png diff --git a/Cargo.lock b/Cargo.lock index 1be020ed..d88ffe4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -309,6 +309,12 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itoa" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" + [[package]] name = "libc" version = "0.2.175" @@ -346,6 +352,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -398,6 +410,7 @@ dependencies = [ "rayon", "rgb", "rustc-hash", + "serde_json", "zopfli", ] @@ -426,6 +439,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + [[package]] name = "pxfm" version = "0.1.24" @@ -435,6 +457,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +dependencies = [ + "proc-macro2", +] + [[package]] name = "radium" version = "0.7.0" @@ -489,6 +520,48 @@ dependencies = [ "windows-sys 0.61.0", ] +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + [[package]] name = "shlex" version = "1.3.0" @@ -507,6 +580,17 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "syn" +version = "2.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tap" version = "1.0.1" @@ -523,6 +607,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + [[package]] name = "utf8parse" version = "0.2.2" @@ -633,6 +723,12 @@ dependencies = [ "tap", ] +[[package]] +name = "zmij" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4af59da1029247450b54ba43e0b62c8e376582464bbe5504dd525fe521e7e8fd" + [[package]] name = "zopfli" version = "0.8.3" diff --git a/Cargo.toml b/Cargo.toml index 9c333ecc..0719ce76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,46 +38,25 @@ name = "zopfli" required-features = ["zopfli"] [dependencies] -zopfli = { version = "0.8.3", optional = true, default-features = false, features = ["std", "zlib"] } -rgb = "0.8.52" +bitvec = "1.0.1" +clap = { version = "4.5.53", optional = true, features = ["wrap_help"] } +crossbeam-channel = { version = "0.5.15", optional = true } +env_logger = { version = "0.11.8", optional = true, default-features = false, features = ["auto-color"] } +image = { version = "0.25.9", optional = true, default-features = false, features = ["png"] } indexmap = "2.13.0" libdeflater = "1.25.0" log = "0.4.29" -bitvec = "1.0.1" +parse-size = { version = "1.1.0", optional = true } +rayon = { version = "1.11.0", optional = true } +rgb = "0.8.52" rustc-hash = "2.1.1" +zopfli = { version = "0.8.3", optional = true, default-features = false, features = ["std", "zlib"] } -[dependencies.env_logger] -optional = true -default-features = false -features = ["auto-color"] -version = "0.11.8" +[target.'cfg(windows)'.dependencies] +glob = { version = "0.3.3", optional = true } -[dependencies.crossbeam-channel] -optional = true -version = "0.5.15" - -[dependencies.rayon] -optional = true -version = "1.11.0" - -[dependencies.clap] -optional = true -version = "4.5.54" -features = ["wrap_help"] - -[dependencies.parse-size] -optional = true -version = "1.1.0" - -[target.'cfg(windows)'.dependencies.glob] -optional = true -version = "0.3.3" - -[dependencies.image] -optional = true -default-features = false -features = ["png"] -version = "0.25.9" +[dev-dependencies] +serde_json = "1.0.147" [features] binary = ["dep:clap", "dep:glob", "dep:env_logger", "dep:parse-size"] diff --git a/src/cli.rs b/src/cli.rs index ca607ceb..e0b45296 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -226,6 +226,14 @@ losslessly.") .action(ArgAction::SetTrue) .conflicts_with("verbose"), ) + .arg( + Arg::new("json") + .help("Print results as JSON") + .short('j') + .long("json") + .action(ArgAction::SetTrue) + .conflicts_with("stdout"), + ) .arg( Arg::new("filters") .help("Filters to try (0-9; see '--help' for details)") diff --git a/src/evaluate.rs b/src/evaluate.rs index b9c572b8..f25f628d 100644 --- a/src/evaluate.rs +++ b/src/evaluate.rs @@ -118,7 +118,7 @@ impl Evaluator { /// Check if the image is smaller than others pub fn try_image(&self, image: Arc) { - let description = format!("{}", image.ihdr.color_type); + let description = image.ihdr.color_type.to_string(); self.try_image_with_description(image, &description); } diff --git a/src/lib.rs b/src/lib.rs index 28d956ec..f517e745 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,6 +64,7 @@ pub mod internal_tests { } pub type PngResult = Result; +pub type OptimizationResult = PngResult<(usize, usize)>; #[derive(Debug)] /// A raw image definition which can be used to create an optimized png @@ -165,7 +166,7 @@ impl RawImage { /// Perform optimization on the input file using the options provided /// /// Returns the original and optimized file sizes -pub fn optimize(input: &InFile, output: &OutFile, opts: &Options) -> PngResult<(usize, usize)> { +pub fn optimize(input: &InFile, output: &OutFile, opts: &Options) -> OptimizationResult { // Read in the file and try to decode as PNG. info!("Processing: {input}"); diff --git a/src/main.rs b/src/main.rs index e1cf60ff..214a0ae9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,7 +19,9 @@ use indexmap::IndexSet; use log::{Level, LevelFilter, error, warn}; #[cfg(feature = "zopfli")] use oxipng::ZopfliOptions; -use oxipng::{Deflater, FilterStrategy, InFile, Options, OutFile, PngError, StripChunks}; +use oxipng::{ + Deflater, FilterStrategy, InFile, OptimizationResult, Options, OutFile, PngError, StripChunks, +}; use rayon::prelude::*; use crate::cli::DISPLAY_CHUNKS; @@ -51,15 +53,22 @@ fn main() -> ExitCode { #[cfg(not(windows))] let inputs: Vec<_> = file_args.collect(); let using_stdin = inputs.len() == 1 && inputs[0].to_str() == Some("-"); + if using_stdin && out_dir.is_some() { + error!("Cannot use --dir when reading from stdin."); + return ExitCode::FAILURE; + } + if using_stdin && matches!(out_file, OutFile::Path { path: None, .. }) { + out_file = OutFile::StdOut; + } + let using_stdout = matches!(out_file, OutFile::StdOut); + let json = matches.get_flag("json"); + if using_stdout && json { + error!("Cannot use --json when writing to stdout."); + return ExitCode::FAILURE; + } + let files = if using_stdin { - if out_dir.is_some() { - error!("Cannot use --dir when reading from stdin."); - return ExitCode::FAILURE; - } - if matches!(out_file, OutFile::Path { path: None, .. }) { - out_file = OutFile::StdOut; - } - vec![(InFile::StdIn, out_file.clone())] + vec![(InFile::StdIn, out_file)] } else { collect_files( inputs, @@ -71,7 +80,7 @@ fn main() -> ExitCode { }; let is_verbose = matches.get_count("verbose") > 0; - let print_summary = !matches.get_flag("quiet") && !matches!(out_file, OutFile::StdOut); + let print_summary = !matches.get_flag("quiet") && !using_stdout; let print_progress = print_summary && !is_verbose && stdout().is_terminal(); let total_files = files.len(); let num_processed = AtomicUsize::new(0); @@ -79,9 +88,9 @@ fn main() -> ExitCode { print!("Files processed: 0/{}...", total_files); stdout().flush().ok(); } - let process = |(input, output): (InFile, OutFile)| { - let result = process_file(&input, &output, &opts); - if print_progress && matches!(result, OptimizationResult::Ok(_, _)) { + let process = |(input, output): &(InFile, OutFile)| { + let result = process_file(input, output, &opts); + if print_progress && matches!(result, OptimizationResult::Ok(_)) { let value = num_processed.fetch_add(1, AcqRel) + 1; print!("\rFiles processed: {}/{}...", value, total_files); stdout().flush().ok(); @@ -89,9 +98,9 @@ fn main() -> ExitCode { result }; let results: Vec = if matches.get_flag("parallel-files") { - files.into_par_iter().map(process).collect() + files.par_iter().map(process).collect() } else { - files.into_iter().map(process).collect() + files.iter().map(process).collect() }; // Collect stats @@ -100,23 +109,25 @@ fn main() -> ExitCode { let mut num_failed = 0; let mut total_in: i64 = 0; let mut total_out: i64 = 0; - for result in results { + for result in &results { match result { - OptimizationResult::Ok(insize, outsize) => { + Ok((insize, outsize)) => { num_succeeded += 1; - total_in += insize as i64; - total_out += outsize as i64; + total_in += *insize as i64; + total_out += *outsize as i64; if !opts.force && insize == outsize { num_not_optimized += 1; } } - OptimizationResult::Failed => num_failed += 1, - OptimizationResult::Skipped => {} + Err(PngError::C2PAMetadataPreventsChanges | PngError::InflatedDataTooLong(_)) => {} + Err(_) => num_failed += 1, } } - // Print summary - if print_summary { + // Print results + if json { + json_output(&files, &results); + } else if print_summary { let in_bytes = format_bytes(total_in, true); let out_bytes = format_bytes(total_out, true); let saved = total_in - total_out; @@ -143,6 +154,13 @@ fn main() -> ExitCode { } } + // For optimizing single files, this will return the correct exit code always. + // For recursive optimization, the correct choice is a bit subjective. + // We're choosing to return a 0 exit code if ANY file in the set + // runs correctly. + // The reason for this is that recursion may pick up files that are not + // PNG files, and return an error for them. + // We don't really want to return an error code for those files. if num_succeeded > 0 { ExitCode::SUCCESS } else if num_failed > 0 { @@ -152,13 +170,6 @@ fn main() -> ExitCode { } } -#[derive(Eq, PartialEq, Ord, PartialOrd)] -enum OptimizationResult { - Ok(usize, usize), - Failed, - Skipped, -} - fn collect_files( files: Vec, out_dir: &Option, @@ -506,28 +517,91 @@ fn process_file(input: &InFile, output: &OutFile, opts: &Options) -> Optimizatio if let (Some(max_size), InFile::Path(path)) = (opts.max_decompressed_size, input) { if path.metadata().is_ok_and(|m| m.len() > max_size as u64) { warn!("{input}: Skipped: File exceeds the maximum size ({max_size} bytes)"); - return OptimizationResult::Skipped; + return Err(PngError::InflatedDataTooLong(max_size)); } } - match oxipng::optimize(input, output, opts) { - // For optimizing single files, this will return the correct exit code always. - // For recursive optimization, the correct choice is a bit subjective. - // We're choosing to return a 0 exit code if ANY file in the set - // runs correctly. - // The reason for this is that recursion may pick up files that are not - // PNG files, and return an error for them. - // We don't really want to return an error code for those files. - Ok((insize, outsize)) => OptimizationResult::Ok(insize, outsize), + let result = oxipng::optimize(input, output, opts); + match &result { + Ok(_) => {} Err(e @ PngError::C2PAMetadataPreventsChanges | e @ PngError::InflatedDataTooLong(_)) => { warn!("{input}: Skipped: {e}"); - OptimizationResult::Skipped } Err(e) => { error!("{input}: {e}"); - OptimizationResult::Failed } } + result +} + +/// Write optimization results as json. +/// ``` +/// { +/// "results": [ +/// { +/// "input": string, +/// "status": "success", +/// "output": string|null, +/// "insize": number, +/// "outsize": number +/// }, +/// { +/// "input": string, +/// "status": "error", +/// "error": string +/// } +/// ] +/// } +/// ``` +fn json_output(files: &[(InFile, OutFile)], results: &[OptimizationResult]) { + print!(r#"{{"results":["#); + let mut first = true; + results + .iter() + .zip(files) + .for_each(|(result, (input, output))| { + if !first { + print!(","); + } + print!(r#"{{"input":"{}","#, json_escape(&input.to_string())); + match result { + Ok((insize, outsize)) => { + let outpath = match output { + OutFile::None => "null".to_owned(), + OutFile::Path { path: None, .. } => { + format!(r#""{}""#, json_escape(&input.to_string())) + } + OutFile::Path { path: Some(p), .. } => { + format!(r#""{}""#, json_escape(&p.display().to_string())) + } + OutFile::StdOut => unreachable!(), + }; + print!( + r#""status":"success","output":{},"insize":{},"outsize":{}}}"#, + outpath, insize, outsize + ); + } + Err(e) => { + print!( + r#""status":"error","error":"{}"}}"#, + json_escape(&e.to_string()) + ); + } + } + first = false; + }); + print!("]}}"); +} + +fn json_escape(string: &str) -> String { + string + .replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\t", "\\t") + .replace("\r", "\\r") + .replace("\x08", "\\b") + .replace("\x0c", "\\f") } /// Format byte counts as IEC units to 3 significant figures. diff --git a/tests/files/json.png b/tests/files/json.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7f12ce922f2582878a67bb32fa543266513a80 GIT binary patch literal 42531 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