Releases: tirr-c/jxl-oxide
jxl-oxide v0.11.2
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
: Addrayon_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
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
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
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
Version 0.10.1 of jxl-oxide is quite a small release with documentation updates.
Changed
jxl-oxide
: Enableimage
feature in Docs.rs (#382).
Full Changelog: 0.10.0...0.10.1
jxl-oxide v0.10.0
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
: Acceptu8
andu16
output buffers inImageStream::write_to_buffer
(#366).jxl-oxide
: Addimage
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
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 generatedmluc
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
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
Changed
jxl-grid
: Reorganize modules (#303). Types are renamed.jxl-image
: MoveImageMetadata::encoded_color_channels
intojxl_frame::FrameHeader
(#322).
Removed
jxl-oxide
: RemoveRender::image
(#334). UseRender::stream
instead.
Fixed
jxl-render
: Fix typo in forward DCT (#301).
Full Changelog: 0.8.1...0.9.0
jxl-oxide v0.8.1
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
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, makeIncludeMeta
the default (#275).
Removed
jxl-oxide-cli
: Hide--lz77-mode
(#275).
Full Changelog: 0.7.2...0.8.0