Overview of JPEG XL
jpeg.org
jpeg.org
In order to get the non-DCT lossy compression, you need to request "Modular Mode" in the program that compresses the image. But for some reason I don't know, Irfanview is literally hiding that checkbox from you, and you can enable the feature by editing the dialog resource and making the checkbox no longer hidden.
---
Meanwhile, I still prefer WEBP for lossless compression, because the decompression code is so fast. In terms of who has the best lossless compression, WEBP and JXL easily beat AVIF, and JXL usually beats WEBP, but not always. In one case, I saw a grayscale BMP file getting better compression with FLAC (!) than JXL.
WEBP's lossy format is just not that good, AVIF and JXL beat the hell out of it, sometimes the JPEG even looks better. But WEBP's lossless format is excellent.
I thought FLAC are for audio only or am I missing something?
Compared to other Lossless I thought JXL was quite computational heavy, even with the very recent optimisation. HALIC (High Availability Lossless Image Compression) is still unbelievably good. Except it is not open source ( yet ).
Hopefully we will see work on image quality improvement at below BPP 1.0 this year.
It just happened to work particularly well on a certain grayscale image. Because only an 8-bit grayscale image could potentially be similar to 8-bit mono unsigned audio, I wouldn't try any other image format.
And why this format should be more-supported than currently: https://jpegxl.info/why-jxl.html
Combining both use cases into one format makes the API more complicated. There are some footguns in the compression API for people trying to do the most basic task (SRGB to YCbCr Lossy VarDCT), where if you specify the wrong value in a struct somewhere (I think it was the "Use Original Profile" flag), you get poor quality compression, as it stores the image as RGB rather than going to YCbCr first. Yes, I know I used the API incorrectly.
WEBP had a much simpler API. You just call a few functions to get the dimensions of the image, then you allocate a 24-bit or 32-bit buffer (either RGB or BGR byte order) to load the image into.