jpegxl-rs

Documentation Crates.io CI License: GPL-3.0-or-later

jpegxl-rs is a safe wrapper over jpeg-xl library. Check out the original library and the bindings.

Building

The library build jpeg-xl and link to libc++ by default. Optionally, you can set --features without-build, then set the include path and lib path with DEP_JXL_INCLUDE and DEP_JXL_LIB respectively.

If you don't want to depend on C++ standard library, use --features without-threads to disable default threadpool. Instead, you can enable with-rayon feature to use its threadpool.

You need to have a working llvm environment.

Usage

Decoding

rust use jpegxl_rs::*; let sample = std::fs::read("test/sample.jxl")?; let mut decoder: JXLDecoder<u8> = decoder_builder().build()?; let (info, buffer) = decoder.decode(&sample)?;

Set output pixel paramaters

rust // Pixel type is set by type parameter let mut decoder: JXLDecoder<u16> = decoder_builder() .num_channel(3) .endianness(Endianness::Big) .align(8) .build()?;

Encoding

```rust use jpegxl_rs::*; use image::io::Reader as ImageReader;

let sample = ImageReader::open("test/sample.png")?.decode()?.torgba16(); let mut encoder = encoderbuilder().build()?; let buffer: Vec = encoder.encode( &sample, sample.width() as _, sample.height() as _ )?; ```

image crate integration

The integration is enabled by default. If you don't need it, use without-image feature.

```rust use jpegxl_rs::image::*; use image::DynamicImage;

let sample = std::fs::read("test/sample.jxl")?; let decoder: JXLImageDecoder = JXLImageDecoder::new(&sample)?; let img = DynamicImage::from_decoder(decoder)?;
```