#![allow(
clippy::print_stdout,
reason = "a runnable example reports its round-trip results to stdout"
)]
use webpkit::{Dimensions, Effort, Encoder, ImageRef, PixelLayout, Result, decode};
fn main() -> Result<()> {
let (w, h) = (4u32, 4u32);
let mut rgba = Vec::new();
for y in 0..h {
for x in 0..w {
let r = u8::try_from(x * 60).unwrap_or(255);
let g = u8::try_from(y * 60).unwrap_or(255);
rgba.extend_from_slice(&[r, g, 128, 255]);
}
}
let dims = Dimensions::new(w, h)?;
let img = ImageRef::new(dims, PixelLayout::Rgba8, &rgba)?;
let lossless = Encoder::lossless().effort(Effort::Best).encode_ref(img)?;
let back = decode(&lossless)?;
assert_eq!(back.as_bytes(), &rgba[..], "lossless must be byte-exact");
println!("lossless: {} bytes, decoded byte-exact", lossless.len());
let lossy = Encoder::lossy().quality(90).encode_ref(img)?;
let back = decode(&lossy)?;
assert_eq!(back.dimensions(), dims, "lossy must preserve dimensions");
println!("lossy(q90): {} bytes, decoded {w}x{h}", lossy.len());
Ok(())
}