use crate::cli::Cli;
use anyhow::{Context, Result};
const PRESET: u8 = 4;
#[derive(Clone, Copy)]
pub struct Opts {
pub enabled: bool,
pub zopfli: bool,
}
impl Opts {
pub fn from_cli(cli: &Cli) -> Self {
Self {
enabled: !cli.no_optimize,
zopfli: cli.zopfli,
}
}
}
pub fn maybe_optimize(png: Vec<u8>, opts: Opts) -> Result<Vec<u8>> {
if !opts.enabled {
return Ok(png);
}
let mut options = oxipng::Options::from_preset(PRESET);
options.optimize_alpha = true;
if opts.zopfli {
options.deflater = oxipng::Deflater::Zopfli(oxipng::ZopfliOptions::default());
}
oxipng::optimize_from_memory(&png, &options).context("oxipng optimization")
}