Skip to content

Releases: tirr-c/jxl-oxide

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

jxl-oxide v0.7.2

04 Mar 17:44
Compare
Choose a tag to compare

Version 0.7.2 of jxl-oxide works around the libjxl bug with lossless JPEG XL images.

Added

  • jxl-oxide-cli: Add decode argument --lz77-mode (#272).

Fixed

  • jxl-modular: Support "legacy" method of computing LZ77 dist_multiplier (#269, #271).

Full Changelog: 0.7.1...0.7.2

jxl-oxide v0.7.1

28 Feb 16:28
Compare
Choose a tag to compare

Version 0.7.1 of jxl-oxide fixes a bug that it couldn't decode progressive Modular image with specific settings.

Fixed

  • jxl-modular: Fix Squeeze bug when image dimension is slightly larger than group boundary (#258).

Full Changelog: 0.7.0...0.7.1