Skip to content

Commit

Permalink
feat(cli): added webp codec
Browse files Browse the repository at this point in the history
  • Loading branch information
SalOne22 committed Mar 17, 2024
1 parent aa89db5 commit 57db180
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/cli/codecs/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use clap::Command;

use self::{
avif::avif, farbfeld::farbfeld, jpeg::jpeg, jpeg_xl::jpeg_xl, mozjpeg::mozjpeg, oxipng::oxipng,
png::png, ppm::ppm, qoi::qoi,
png::png, ppm::ppm, qoi::qoi, webp::webp,
};

mod avif;
Expand All @@ -14,6 +14,7 @@ mod oxipng;
mod png;
mod ppm;
mod qoi;
mod webp;

impl Codecs for Command {
fn codecs(self) -> Self {
Expand All @@ -27,6 +28,7 @@ impl Codecs for Command {
png(),
ppm(),
qoi(),
webp(),
])
}
}
Expand Down
18 changes: 18 additions & 0 deletions src/cli/codecs/webp.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use clap::{arg, value_parser, Command};

pub fn webp() -> Command {
Command::new("webp")
.about("Encode images into WebP format")
.args([
arg!(--lossless "Encode image without quality loss").conflicts_with_all(["quality"]),
arg!(-q --quality <NUM> "Quality, values 60-80 are recommended")
.value_parser(value_parser!(u8).range(1..=100))
.default_value("75"),
arg!(--slight_loss <NUM> "Slight loss in quality for lossless encoding")
.value_parser(value_parser!(u8).range(0..=100))
.default_value("0")
.requires("lossless"),
arg!(--discrete "Discrete tone image").requires("lossless"),
arg!(--exact "Preserve transparent data"),
])
}
11 changes: 11 additions & 0 deletions src/cli/pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use rimage::codecs::{
avif::{AvifEncoder, AvifOptions},
mozjpeg::{MozJpegEncoder, MozJpegOptions},
oxipng::{OxiPngEncoder, OxiPngOptions},
webp::{WebPEncoder, WebPOptions},
};
use zune_core::{bytestream::ZByteReader, options::EncoderOptions};
use zune_image::{
Expand Down Expand Up @@ -251,6 +252,16 @@ pub fn encoder(matches: &ArgMatches) -> Result<(Box<dyn EncoderTrait>, &'static

Ok((Box::new(AvifEncoder::new_with_options(options)), "avif"))
}
"webp" => {
let mut options = WebPOptions::new().unwrap();

options.quality = *matches.get_one::<u8>("quality").unwrap() as f32;
options.lossless = matches.get_flag("lossless") as i32;
options.near_lossless = 100 - *matches.get_one::<u8>("slight_loss").unwrap() as i32;
options.exact = matches.get_flag("exact") as i32;

Ok((Box::new(WebPEncoder::new_with_options(options)), "webp"))
}
"png" => Ok((Box::new(PngEncoder::new()), "png")),
"ppm" => Ok((Box::new(PPMEncoder::new()), "ppm")),
"qoi" => Ok((Box::new(QoiEncoder::new()), "qoi")),
Expand Down

0 comments on commit 57db180

Please sign in to comment.