Add webp image support

This commit is contained in:
2025-08-06 11:01:45 +08:00
parent 5b75b23060
commit 226ac24844
6 changed files with 127 additions and 3 deletions

View File

@@ -36,6 +36,15 @@ fn parse_zstd_compression_level(level: &str) -> Result<i32, String> {
clap_num::number_range(level, 0, 22)
}
#[cfg(feature = "webp")]
fn parse_webp_quality(quality: &str) -> Result<u8, String> {
let lower = quality.to_ascii_lowercase();
if lower == "best" {
return Ok(100);
}
clap_num::number_range(quality, 0, 100)
}
/// Tools for export and import scripts
#[derive(Parser, Debug)]
#[clap(
@@ -45,6 +54,7 @@ fn parse_zstd_compression_level(level: &str) -> Result<i32, String> {
group = ArgGroup::new("artemis_indentg").multiple(false),
group = ArgGroup::new("ex_hibit_rld_xor_keyg").multiple(false),
group = ArgGroup::new("ex_hibit_rld_def_xor_keyg").multiple(false),
group = ArgGroup::new("webp_qualityg").multiple(false),
)]
#[command(
version,
@@ -299,9 +309,17 @@ pub struct Arg {
/// Path to the ExHibit rld def keys file, which contains the keys in BINARY format.
pub ex_hibit_rld_def_keys: Option<String>,
#[cfg(feature = "mozjpeg")]
#[arg(long, global = true, default_value_t = 80, value_parser = parse_jpeg_quality)]
#[arg(short = 'j', long, global = true, default_value_t = 80, value_parser = parse_jpeg_quality)]
/// JPEG quality for output images, 0-100. 100 means best quality.
pub jpeg_quality: u8,
#[cfg(feature = "webp")]
#[arg(short = 'w', long, global = true, group = "webp_qualityg")]
/// Use WebP lossless compression for output images.
pub webp_lossless: bool,
#[cfg(feature = "webp")]
#[arg(short = 'W', long, global = true, value_name = "QUALITY", group = "webp_qualityg", value_parser = parse_webp_quality, default_value_t = 80)]
/// WebP quality for output images, 0-100. 100 means best quality.
pub webp_quality: u8,
#[command(subcommand)]
/// Command
pub command: Command,