jpegxl-rs

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

A safe JPEGXL wrapper over libjxl library. Check out the original library and the bindings.

Building

If you wish to specify a custom library path, set DEP_JXL_LIB environment variable.

Building libjxl and statically linking can be enabled by using vendored feature. You can provide the source code with all third-party dependencies by DEP_JXL_PATH, or it would fetch the code by git.

If you don't want to depend on C++ standard library, disable feature threads.

Usage

Currently, u8, u16 and f32(partial) are supported as pixel types. u32 is in the header but not implemented.

Note: f32 with alpha channel is not supported in encoder.

Decoding

```rust let mut decoder = decoder_builder().build()?;

// Multi-threading use jpegxlrs::ThreadsRunner; let runner = ThreadsRunner::default(); let mut decoder = decoderbuilder() .parallel_runner(&runner) .build()?;

// Customize pixel format let mut decoder = decoderbuilder() .numchannels(3) .endianness(Endianness::Big) .align(8) .build()?;

decoder.decode_to::(&sample);

// You can change the settings after initialization decoder.num_channels = 1; decoder.endianness = Endianness::Native; ```

Encoding

rust use image::io::Reader as ImageReader; let sample = ImageReader::open("../samples/sample.png")?.decode()?.to_rgba16(); let mut encoder = encoder_builder().build()?; let buffer: EncoderResult<f32> = encoder.encode(&sample, sample.width(), sample.height())?;

Set encoder options

rust let mut encoder = encoder_builder() .lossless(true) .speed(EncoderSpeed::Falcon) .build()?; // You can change the settings after initialization encoder.lossless = false; encoder.quality = 3.0;

image crate integration

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

```rust use jpegxlrs::image::ToDynamic; use jpegxlrs::decoder_builder; use image::DynamicImage;

let sample = std::fs::read("../samples/sample.jxl")?; let decoder = decoderbuilder().build()?; let img = decoder.decode(&sample)?.intodynamic_image(); ```

License: GPL-3.0-or-later