QOI, the Quite OK Image format,has been gaining in popularity. Chris Wellons offers a great analysis.
QOI's key advantages is its simplicity. Being a byte-oriented formatwithout entropy encoding, it can be further compressed with genericcodecs like lz4, xz, and zstd. PNG, on the other hand, uses DEFLATEcompression internally and is typically resistant to furthercompression. By applying a stronger compression algorithm on QOI output,you can often achieve a smaller file size compared to PNG.
Lasse Collin has shared some effective options for compressinguncompressed BMP/TIFF files. I tested them on the QOI benchmark images.
1 | % cat ~/tmp/b.sh |
1 | % cd /tmp/dc-img/images/ |
.png | .qoi.xz | .bmp.xz | .tiff.xz | .p[ap]m.xz |
---|---|---|---|---|
11154424 | 7476640 | 8042032 | 8064476 | 8039192 |
828119 | 708480 | 730472 | 757760 | 735296 |
15394305 | 12902852 | 13612440 | 13616140 | 13610844 |
237834256 | 213268188 | 210591724 | 210508596 | 210468412 |
88339751 | 86679696 | 86380124 | 86274480 | 86241296 |
229608249 | 193382668 | 187439556 | 187718460 | 187349124 |
266238855 | 218915316 | 217036084 | 217177880 | 217084420 |
40272678 | 21321460 | 21458496 | 21532360 | 21533432 |
37854634 | 28967008 | 30054968 | 30064236 | 30059784 |
43523493 | 54117600 | 70302536 | 45385684 | 73617008 |
18946769 | 14950836 | 14835648 | 14853420 | 14839312 |
102962935 | 82279000 | 79374112 | 79348768 | 79336276 |
51765329 | 43681548 | 45045392 | 45154436 | 45196092 |
While compressing QOI with XZ (.qoi.xz
) can achieve goodresults, using a delta filter directly on the uncompressed BMP format(.bmp.xz
) can sometimes lead to even smaller files. Thissuggests that QOI is probably not better than a plain delta filter.
QOI_OP_INDEX
essentially does length-1 LZ77 using aconceptual window that contains 64 unique pixels. When furthercompressed, another match finder seems to help very little.
1 | % cat ~/tmp/qoi-weak-xz.sh |
directory | strong | weak | increase |
---|---|---|---|
icon_512 | 7476640 | 8629900 | 15.42% |
icon_64 | 708480 | 735036 | 3.75% |
photo_kodak | 12902852 | 13464072 | 4.35% |
photo_tecnick | 213268188 | 217460392 | 1.97% |
photo_wikipedia | 86679696 | 88609716 | 2.23% |
pngimg | 193382668 | 206679224 | 6.88% |
screenshot_game | 218915316 | 234889060 | 7.3% |
screenshot_web | 21321460 | 24820020 | 16.41% |
textures_photo | 28967008 | 31249492 | 7.88% |
textures_pk | 54117600 | 57956168 | 7.09% |
textures_pk01 | 14950836 | 15749556 | 5.34% |
textures_pk02 | 82279000 | 87747576 | 6.65% |
textures_plants | 43681548 | 45494084 | 4.15% |
weak.tsv | 0 | 0 | NaN% |
Combining delta coding and a fast entropy encoder can achieve smallerfile sizes compared to compressed QOI.