Releases: tirr-c/jxl-oxide
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
jxl-oxide v0.7.2
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
Full Changelog: 0.7.1...0.7.2
jxl-oxide v0.7.1
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