jpegxl-rs 0.2.3-beta.2

Safe Rust wrapper for JPEG XL reference implementation
Documentation
# jpegxl-rs

`jpegxl-rs` is a safe wrapper over `jpeg-xl` library. Check out the original [library](https://gitlab.com/wg1/jpeg-xl)
and the [bindings](https://github.com/inflation/jpegxl-sys).

## 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()?.to_rgba16();
let mut encoder = encoder_builder().build()?;
let buffer: Vec<u8> = encoder.encode(
                        &sample, 
                        sample.width() as _, 
                        sample.height() as _
                      )?;
```

### [`image`]https://crates.io/crates/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<u16> = JXLImageDecoder::new(&sample)?;
let img = DynamicImage::from_decoder(decoder)?;       
```