The main thing with JPEG is that being a DCT-based block codec, you're always (even at max quality, since it always quantizes no matter what) going to get a bit of blockyness (and color shifts, though those could be an issue for a signal-domain scheme as well) which tends to look rather bad for UI graphics, especially as you typically have fairly clean and sharp shapes that are pretty much the worst-case for such a codec. Assuming rdopng does the lossy optimization directly in signal domain, it should probably be able to produce artifacts that are more likely to remain perceptually insignificant in this particular application.rdopng looks pretty cool, TILI wonder how much further compression ratio could be improved with a lossy filter like rdopng.
I think you would get the best results with the rdopng PNG encoder, but using zstd (or brotli) to encode the differential vs miniz. With zstd that is the "ZPNG" codec in the above-posted graph. (but then, JPEG decodes faster than PNG anyway if you can go lossy, so it would be for transparent things).
ps. It is a bit unfortunate that the rdopng examples given on github are mostly photos.. because judging by the one example ("high fidelity") with just a gradient and some text, it does seem to distort the gradient quite a bit at more aggressive settings and it'd be interesting to know how it handles something like path-traced GUI panels, where something like JPEG does poorly due to the sharp features, but which still have smooth diffuse gradients (that often need dither to look good even in 8bpp). Don't have the energy to try right now though.
Statistics: Posted by mystran — Mon Mar 11, 2024 10:13 pm