tiny-webp 0.1.1

Lossy WebP encoder in Rust with a cwebp-shaped command line
Documentation

tiny-webp

Lossy WebP encoder in Rust, with a cwebp-shaped command line.

The encoder writes a single VP8 key frame inside a RIFF WebP container, from the RGB or RGBA bytes a caller already holds. The library is no_std and allocates through alloc. It works on byte slices in memory, so paths and file handles stay with the caller.

Status

Version 0.1.0 writes one lossy VP8 key frame in a RIFF WebP container. Opaque images use a bare VP8 chunk. Images with transparency use VP8X, an uncompressed ALPH chunk, and VP8 . The alpha bytes stay exact.

The encoder uses DC prediction for luma and chroma, the Y2 transform path, one token partition, and a fixed quantizer selected by q.

Size and RGB PSNR relative to cwebp vary by image and q. CALIBRATION.md records results at q 50, 75, and 90. At all three settings, flat and one-pixel produce smaller files than cwebp. Every other fixture produces larger files.

At q 75, photo-large uses 1.59 times cwebp's bytes. Its RGB PSNR is 30.5 dB against cwebp's 29.5 dB.

The command reads PNG, JPEG, and WebP from a path or stdin. It writes WebP to a path or stdout.

Install

Install the command:

cargo install tiny-webp

Add the library to [dependencies]:

tiny-webp = "0.1"

Library

Options is #[non_exhaustive], so build one from its default and assign the fields that change.

let mut opts = tiny_webp::Options::default();
opts.quality = 90;
opts.alpha = tiny_webp::Alpha::Discard;

let webp = tiny_webp::encode_rgba(&rgba, width, height, &opts)?;

encode_rgb takes the same arguments over three bytes per pixel and writes an opaque image.

Command line

usage: tiny-webp [options] <input> -o <output.webp>

  -q <0..100>, --quality <0..100>   quality, default 75
  -o <file>,   --output <file>      output path, or - for stdout
  -noalpha                          drop the alpha plane
  -quiet                            no output on success
  -v                                print dimensions, bytes, and encode time
  -version, --version
  -h, --help

cwebp spells -noalpha, -quiet, and -version with one dash, and both spellings reach the same flag here. A bare - means stdin on the input and stdout on the output.

A usage error exits 2 and puts the problem and this text on stderr. Any other failure exits 1 with one line on stderr.

License

Licensed under either of

at your option.