Skip to content

Releases: tirr-c/jxl-oxide

jxl-oxide v0.11.2

19 Feb 16:50
4eb309e
Compare
Choose a tag to compare

Version 0.11.2 of jxl-oxide fixes stack overflows when using multiple Rayon thread pools, by adding an option to use global Rayon pool and making it default (which is desirable most of the time).

Technically, this is a breaking change behavior-wise. However, existing code will still compile (API itself doesn't have breaking changes) and I consider the original behavior a bug, so I'm making a patch release.

Added

  • jxl-threadpool: Add rayon_global (#420).

Changed

  • jxl-oxide: Default thread pool now uses global Rayon pool, instead of creating new pool (#420).

Full Changelog: 0.11.1...0.11.2

jxl-oxide v0.11.1

26 Jan 05:38
3db6100
Compare
Choose a tag to compare

Version 0.11.1 of jxl-oxide contains bugfixes around images with higher LF frame level (lf_level >= 2).

Fixed

  • jxl-render: Fix incorrect upsampling factor when using higher-level LF frame (#412).
  • jxl-render: Fix edge condition with higher-level LF frame (#413).

Full Changelog: 0.11.0...0.11.1

jxl-oxide v0.11.0

28 Dec 07:24
45f7698
Compare
Choose a tag to compare

Version 0.11.0 of jxl-oxide comes with some bugfixes, optimization around noise features, Exif and XMP metadata extraction, and most importantly, JPEG bitstream reconstruction.

JPEG bitstream reconstruction

jxl-oxide can now reconstruct original JPEG file from losslessly recompressed JPEG XL file. By default jxl-oxide-cli will try to reconstruct JPEG if output file path is given and its extension is jpg or jpeg.

$ jxl-oxide recompressed.jxl -o out.jpg
2024-12-28T07:08:08.758724Z  INFO jxl_oxide_cli::decode: Reconstructing to JPEG
2024-12-28T07:08:08.863044Z  INFO jxl_oxide_cli::decode: Took 104.27 ms (35.36 MP/s)
$ jxl-oxide recompressed.jxl -o out.png
2024-12-28T07:08:14.769000Z  INFO jxl_oxide_cli::decode: Image dimension: 2560x1440
2024-12-28T07:08:14.788709Z  INFO jxl_oxide_cli::decode: Took 19.62 ms (187.89 MP/s)

If it fails to reconstruct, by default it will fallback to decoding to pixels. Use -f jpeg to exit on failure.

$ jxl-oxide normal.jxl -o out.jpg
2024-12-28T07:12:50.971337Z  INFO jxl_oxide_cli::decode: Reconstructing to JPEG
2024-12-28T07:12:50.971386Z ERROR jxl_oxide_cli::decode: Failed to reconstruct e=reconstruction data not found
2024-12-28T07:12:50.971421Z  WARN jxl_oxide_cli::decode: Falling back to decode-to-pixels
2024-12-28T07:12:50.971425Z  INFO jxl_oxide_cli::decode: Image dimension: 325x325
2024-12-28T07:12:50.994637Z  INFO jxl_oxide_cli::decode: Took 23.16 ms (4.56 MP/s)
$ jxl-oxide normal.jxl -o out.jpg -f jpeg
2024-12-28T07:12:58.974426Z  INFO jxl_oxide_cli::decode: Reconstructing to JPEG
2024-12-28T07:12:58.974474Z ERROR jxl_oxide_cli::decode: Failed to reconstruct e=reconstruction data not found
2024-12-28T07:12:58.974641Z ERROR jxl_oxide: failed to reconstruct: reconstruction data not found

When using jxl-oxide crate directly, use JxlImage::reconstruct_jpeg() to perform reconstruction.

Metadata extraction

While not yet available in the CLI tool, JxlImage::aux_boxes() can be used to retrieve Exif and XMP metadata. Exif metadata is also available in the image crate integration.


Added

  • Implement JPEG bitstream reconstruction (#390).
  • jxl-oxide: Extract (potentially Brotli-compressed) Exif metadata (#389).

Fixed

  • jxl-render: Fix panic in alpha blending without alpha channel (#403).

Full Changelog: 0.10.2...0.11.0

jxl-oxide v0.10.2

07 Dec 07:40
Compare
Choose a tag to compare

Version 0.10.2 of jxl-oxide fixes crashes when handling malformed MA tree or frame TOC.

Fixed

  • jxl-modular: Check MA tree depth limit while decoding (#391).
  • jxl-frame: Track group buffer allocation (#393).

Full Changelog: 0.10.1...0.10.2

jxl-oxide v0.10.1

10 Nov 08:22
f3aaca6
Compare
Choose a tag to compare

Version 0.10.1 of jxl-oxide is quite a small release with documentation updates.

Changed

  • jxl-oxide: Enable image feature in Docs.rs (#382).

Full Changelog: 0.10.0...0.10.1

jxl-oxide v0.10.0

01 Nov 14:46
8c4a2a5
Compare
Choose a tag to compare

Version 0.10.0 of jxl-oxide adds the image crate integration under a feature flag, and received some bugfixes around color management.

Added

  • jxl-oxide: Accept u8 and u16 output buffers in ImageStream::write_to_buffer (#366).
  • jxl-oxide: Add image integration under a feature flag (#368).

Changed

  • jxl-color: Use better PQ to HLG method (#348).

Fixed

  • jxl-render: Fix requested color encoding not applied in some cases (#369).
  • jxl-oxide: Fix CMYK to RGB conversion (#370).

Full Changelog: 0.9.1...0.10.0

jxl-oxide v0.9.1

12 Oct 16:37
fb591f2
Compare
Choose a tag to compare

Version 0.9.1 of jxl-oxide fixes some bugs, including faulty ICC profile generation which made Photoshop fail to open PNG images created by jxl-oxide.

Fixed

  • jxl-color: Fix generated mluc tag in ICC profile (#347).
  • jxl-oxide: Fix panic while decoding fully loaded intermediate frame (#345).

Full Changelog: 0.9.0...0.9.1

jxl-oxide v0.9.0

10 Sep 14:51
33f820c
Compare
Choose a tag to compare

Version 0.9.0 of jxl-oxide contains a few bugfixes, some updates to API, and a bunch of optimizations around libjxl fast-lossless (-d 0 -e 1) images and peak memory usage.

Added

  • jxl-oxide-cli: Use mimalloc (#287, #288).
  • jxl-oxide-cli: Add --num-reps (#292).

Changed

  • jxl-grid: Reorganize modules (#303). Types are renamed.
  • jxl-image: Move ImageMetadata::encoded_color_channels into jxl_frame::FrameHeader (#322).

Removed

  • jxl-oxide: Remove Render::image (#334). Use Render::stream instead.

Fixed

  • jxl-render: Fix typo in forward DCT (#301).

Full Changelog: 0.8.1...0.9.0

jxl-oxide v0.8.1

30 Jul 14:59
Compare
Choose a tag to compare

Version 0.8.1 of jxl-oxide fixes glitches when tonemapping or specific palette transform is used.

Fixed

  • jxl-modular: Fix incorrect color with complex inverse palette (#312).
  • jxl-color: Fix color conversion with out-of-gamut inputs (#316).

Full Changelog: 0.8.0...0.8.1

jxl-oxide v0.8.0

26 Mar 09:21
0f8c5b6
Compare
Choose a tag to compare

Version 0.8.0 of jxl-oxide is relatively small release with WebAssembly SIMD routines and some bugfixes.

Added

  • jxl-color: Add an option to pass sRGB samples to CMS (#267).
  • jxl-oxide-wasm: Port SIMD routines (#274).

Changed

  • jxl-color: Make peak detection non-default (#267).
  • Rename Lz77Mode variants, make IncludeMeta the default (#275).

Removed

  • jxl-oxide-cli: Hide --lz77-mode (#275).

Full Changelog: 0.7.2...0.8.0