nigeltao / qoi2-bikeshed

"Quite OK Image" version 2 discussions
32 stars 0 forks source link

Overall status. #1

Open nigeltao opened 2 years ago

nigeltao commented 1 year ago

I finally have some code, in a new repo: nigeltao/qoir

It's still experimental and exploratory, but it's actual code (not just GitHub issue discussions), if people still want to play around with a QOI-inspired lossless image file format.

Some benchmark numbers:

JXL_Lossless/f  0.2171 CmpRatio    106.48 EncMPixels/s     33.16 DecMPixels/s  images/
JXL_Lossless/l3 0.1831 CmpRatio      5.35 EncMPixels/s      5.97 DecMPixels/s  images/
JXL_Lossless/l7 0.1548 CmpRatio      0.57 EncMPixels/s      4.63 DecMPixels/s  images/
PNG/fpng        0.3115 CmpRatio    192.16 EncMPixels/s    148.19 DecMPixels/s  images/
PNG/fpnge       0.2798 CmpRatio    312.59 EncMPixels/s       nan DecMPixels/s  images/
PNG/libpng      0.2423 CmpRatio      5.49 EncMPixels/s     56.18 DecMPixels/s  images/
PNG/stb         0.3418 CmpRatio      7.67 EncMPixels/s     51.33 DecMPixels/s  images/
PNG/wuffs       0.2388 CmpRatio       nan EncMPixels/s    140.79 DecMPixels/s  images/
QOI             0.2823 CmpRatio    146.87 EncMPixels/s    193.53 DecMPixels/s  images/

QOIR_Lossless   0.2525 CmpRatio    168.90 EncMPixels/s    276.45 DecMPixels/s  images/

WebP_Lossless   0.1651 CmpRatio      2.49 EncMPixels/s     89.94 DecMPixels/s  images/
ZPNG_Lossless   0.2182 CmpRatio    126.21 EncMPixels/s    256.32 DecMPixels/s  images/
ZPNG_NofilLossl 0.3359 CmpRatio    142.41 EncMPixels/s    323.01 DecMPixels/s  images/

---

JXL_Lossy/l3    0.1111 CmpRatio      8.55 EncMPixels/s     25.16 DecMPixels/s  images/
JXL_Lossy/l7    0.0770 CmpRatio      2.19 EncMPixels/s     19.29 DecMPixels/s  images/
QOIR_Lossy      0.1618 CmpRatio    152.57 EncMPixels/s    202.05 DecMPixels/s  images/
WebP_Lossy      0.0213 CmpRatio     11.03 EncMPixels/s    125.29 DecMPixels/s  images/
ZPNG_Lossy      0.1629 CmpRatio    113.86 EncMPixels/s    248.34 DecMPixels/s  images/
nigeltao commented 1 year ago

People who might be interested: @chocolate42, @oscardssmith, @p0nce, @phoboslab, @wbd73.

p0nce commented 1 year ago

I wrote a sort of overview at http://forum.doom9.org/showthread.php?t=184557

dumblob commented 1 year ago

Very cool @nigeltao! QOIR looks very competitive. Your benchmarks are also very informative - I was struck by how WebP is actually good in general (OTOH I did not know about its 16k dimension limit which I am now researching how to overcome).

phoboslab commented 1 year ago

Impressive work!

OT: Just a heads up, there's a guy who took your code and pretends it's his. This dude has been nagging me via email & twitter, and others in a lengthy forum thread, to look at his "experiments" where he randomly changes some numbers in the QOI source. It seems he recently switched to QOIR. To be clear: I don't think he's ill-intentioned; just misguided.

dumblob commented 1 year ago

Btw. the AVIF (so far failed) comparison would really be insightful.

Maybe contacting AVIF upstream devs or maybe Ton Koop (a pseudonym?) from Afosto could be a start? @bakkerpeter @gijsbotje @Rapid0o @sanderkah @TerraSkye @roelofjan-elsinga @HansAdema

(Afosto seems to do some business in image optimization/converting through https://cdn.quicq.io )

nigeltao commented 1 year ago

OT: Just a heads up, there's a guy...

Yeah, they started nagging me last week. I agree that they are probably just misguided. Thanks for the context. :-)

bakkerpeter commented 1 year ago

Hi guys, Peter from Afosto, not sure how I can help here?

nigeltao commented 1 year ago

Hi @bakkerpeter

QOIR is a new, experimental lossless image format. The top-level README.md from that repository lists some benchmark numbers (compression ratio, encode speed, decode speed) compared with a number of other formats, including JPEG-XL, PNG and WebP.

I'd also like to compare against AVIF, but I hit a couple of problems and I am an AVIF newbie.

The first problem is Debian bug 976349. Do you know of an easy way to get an AVIF encoder running on Debian Bullseye?

The second problem is that it wasn't obvious to me how to set up the AVIF library (not the avifenc command-line tool) to encode losslessly. With JPEG-XL, it's a single call to the JxlEncoderSetFrameLossless function. What's the AVIF equivalent?