I think it's often overlooked that AVIF is also really good at flat colour & sharp edges.
Don't go straight for a lossless format just because it's the kind of image that would look bad as a JPEG.
Here's an 11kb image as an AVIF, vs JPEG XL.
I think it's often overlooked that AVIF is also really good at flat colour & sharp edges.
Don't go straight for a lossless format just because it's the kind of image that would look bad as a JPEG.
Here's an 11kb image as an AVIF, vs JPEG XL.
So @eeeps pointed out that cjxl has a hidden 'modular' mode that fairs better for this kind of image. It's still pretty bad compared to the AVIF, but it's sharper than the previous example.
Here's the 11kb AVIF again vs the modular JPEG XL:
I generally prefer AVIF over JPEG XL for my web imagery use-cases, but this case is an extreme outlier.
My learning here is: You can throw pretty much anything at AVIF, whereas JPEG XL is more like WebP, in that you need to get a feeling for when to put it in its 'lossless' mode.
Wouldn't a PNG be the go-to for relatively flat graphics like that?
@jaffathecake I think this example shows a `cjxl` problem rather than a JPEG XL problem. Try forcing Modular mode, and don't be afraid to push the distance parameter, especially at 2x. https://codepen.io/eeeps/pen/zxKvROY
(AVIF might still outperform JPEG XL Modular on flat-color/hard-edged content. I have like half-a-memory of a conversation with @jonsneyers about that, after your AVIF article came out. But AVIF *definitely* outperforms VarDCT for such content).
@eeeps @jaffathecake for screen content, JPEG XL does have some good coding tools like Patches, but making an encoder that uses them effectively hasn't really been a priority yet.
This specific example though should really be served as HTML and SVG, not as any raster image format ;)
@jonsneyers @eeeps I'm pretty sure it'd be larger than 11kb in that case (even after brotli), given the browser logos.
You might be able to beat that by making simplified versions of the logos, but that's non-trivial compared to an image encoder.