png test corpus (2017)

this corpus is about how tools do image reductions by themselves with their default option. some of them however benefits from modifications/options. see also an overview of PNG optimization tools

tests

PNG optimization tools compared
tools 24x REDUCTIONS 72x PALETTED 72x RGBA 10x H-RGBA
tool option version time saved time saved time saved time saved
advdef - z2 1.23 0.91 80 356 0.53 8 715 1.95 1484 3.17 118 096
advdef - z4 1.23 26.75 85 130 63.48 17 259 66.56 7 810 96.22 133 890
advpng - z2 1.23 0.65 40 221 0.54 10 605 1.41 966 2.26 24 433
advpng - z4 1.23 21.97 43 355 63.43 19 347 68.73 1264 92.99 25 714
ECT - 1 57cb86b 0.47 272 356 0.36 2423 1.79 156 652 4.37 42 357
ECT - 3 57cb86b 1.76 295 342 1.75 14 523 5.45 215 776 9.73 177 919
ECT - 5 57cb86b 2.92 295 142 2.65 15 953 10.54 207 166 15.29 189 990
ECT - 9 57cb86b 20.79 302 636 20.15 16 548 53.58 210 295 80.54 209 609
OptiPNG - o2 0.7.6 2.73 270 101 2.33 2 426 7.57 563 17.34 38 128
OptiPNG - o7 0.7.6 37.10 277 589 29.01 2 460 125.29 612 268.35 38 753
pingo - s0 0.80 0.19 281 775 0.33 21 546 0.72 158 847 1.34 99 839
pingo - s1 0.80 0.41 279 562 0.48 33 140 0.92 194 590 1.98 150 009
pingo - s2 0.80 0.58 283 740 0.97 36 251 1.34 204 813 3.04 174 160
Pngcrush custom 1.8.11 3.16 244 147 2.32 378 13.31 156 208 28.97 45 521
PngOptimizer - 2.5.1 0.99 264 805 1.29 16 001 2.23 143 200 4.85 37 112
PNGOUT -s0 -k0 02/13/2015 28.29 276 170 12.26 19 806 68.54 1 736 190.72 141 973
pngwolf libdeflate 1.1.1 12.41 268 595 16.38 10 825 25.37 204 042 27.94 170 748
pngwolf zopfli 1.1.1 49.43 275 323 91.44 19 532 111.12 220 916 141.67 195 202
TruePNG - o1 0.6.2.2 3.88 299 316 4.95 21 568 6.23 164 509 12.44 66 341
TruePNG - o1 - a1 0.6.2.2 11.59 302 568 25.61 23 248 29.45 170 127 69.58 77 362
TruePNG - o4 0.6.2.2 24.61 306 680 39.81 25 194 89.98 176 814 200.78 79 227
ZopfliPNG custom 6818a08 59.07 301 731 117.58 16 038 115.96 203 182 120.91 174 105

image reductions

automatic lossless image reductions (with default/specified option)
tests 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
advdef * bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad med bad med
advpng * bad bad bad bad bad ok bad bad bad bad bad bad bad bad bad bad ok bad bad bad bad med bad bad
ECT -2 (+) ok ok ok ok bad ok ok ok ok ok ok ok bad bad bad ok bad ok ok ok ok bad bad ok
OptiPNG * ok ok ok bad bad ok ok ok ok ok bad bad bad bad bad ok bad bad bad ok bad med ok ok
pingo -s4 (+) ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok bad ok ok
Pngcrush bad ok bad bad bad bad bad bad ok ok bad bad bad bad bad bad bad ok ok med bad med bad ok
PngOptimizer ok ok bad ok bad ok bad bad bad ok ok ok bad ok bad ok bad ok ok med bad bad bad ok
PNGOUT ok bad bad bad bad bad bad bad bad ok ok ok bad bad bad bad bad ok bad bad bad med ok ok
pngwolf * bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad bad ok ok med bad bad bad ok
TruePNG -o1 ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok bad ok ok med bad bad ok ok
TruePNG -o1 -a1 ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok bad ok ok med bad ok ok ok
TruePNG -o4 ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok ok bad ok ok ok bad ok ok ok
ZopfliPNG ok ok ok ok bad ok ok ok ok ok ok ok bad bad bad ok bad ok ok ok bad bad ok ok

score

automatic lossless image reductions
reductions
TruePNG -o4 22 (+1)
TruePNG -o1 -a1 21,5
TruePNG -o1 20,5
ECT -9 17
ECT -5 17
ECT -3 17
ZopfliPNG 17
pingo -s0 16
pingo -s1 15
ECT -1 14
pingo -s2 14
PngOptimizer 12,5
OptiPNG -o7 12,5
OptiPNG -o2 12,5
PNGOUT 7,5
Pngcrush 7
pngwolf (zopfli) 3,5
pngwolf (libdeflate) 3,5
advpng -z4 2,5
advpng -z2 2,5
advdef -z4 1
advdef -z2 1
elapsed time
speed
pingo -s0 2.58
pingo -s1 3.79
advpng -z2 4.86
pingo -s2 5.93
ECT -1 6.99
advdef -z2 6.56
PngOptimizer 9.36
ECT -3 18.69
TruePNG -o1 27.50
OptiPNG -o2 29.97
ECT -5 31.40
Pngcrush 47.76
pngwolf (libdeflate) 82.10
TruePNG -o1 -a1 136.23
ECT -9 175.06
advpng -z4 247.12
advdef -z4 253.01
PNGOUT 299.81
TruePNG -o4 355.18
pngwolf (zopfli) 393.66
ZopfliPNG 413.52
OptiPNG -o7 459.75
bytes saved
optimization
ECT -9 739 088
pngwolf (zopfli) 710 973
ECT -5 708 251
ECT -3 703 560
pingo -s2 698 964
ZopfliPNG 695 056
pingo -s1 657 301
pngwolf (libdeflate) 654 210
TruePNG -o4 587 915
TruePNG -o1 -a1 573 305
pingo -s0 562 007
TruePNG -o1 551 734
ECT -1 473 788
PngOptimizer 461 118
Pngcrush 446 254
PNGOUT 439 685
OptiPNG -o7 319 414
OptiPNG -o2 311 218
advdef -z4 244 089
advdef -z2 208 651
advpng -z4 89 680
advpng -z2 76 225

settings

Efficient Compression Tool

ect -3 -strip

ECT multithreading is actually enabled in this test. the -strip switch removes all non-critical chunks.

OptiPNG

optipng -fix -o2 -strip all

OptiPNG has no multithreading and does not process the dirty transparency. the -fix switch is required for test n°24, and -strip all removes all non-critical chunks.

Pngcrush

pngcrush -fix -reduce -blacken -rem allb

Pngcrush has no multithreading but processes the dirty transparency (-blacken). the -fix switch is required for test n°24, and -rem allb removes all non-critical chunks.

PngOptimizer

pngoptimizer -file:

PngOptimizer uses a file based multithreading. it removes all non-critical chunks by default.

PNGOUT

pngout -s0 -k0

PNGOUT does not have multithreading and does not process the dirty transparency. to be used well, you have to set right options for each files.

pngwolf

pngwolf --max-evaluations=1 --estimator=libdeflate,level=4 --out-deflate=libdeflate,level=12 --normalize-alpha --strip-optional (libdeflate)
pngwolf --max-evaluations=1 --estimator=libdeflate,level=4 --out-deflate=zopfli,iter=15 --normalize-alpha --strip-optional (zopfli)

this pngwolf fork has multithreading enabled, allow to set the estimator and compressor, and processes dirty transparency (--normalize-alpha). -strip-optional removes all non-critical chunks.

TruePNG

truepng -o1 -g0 -md remove all

TruePNG has multithreading enabled, processes dirty transparency and -md remove all and -g0 removes all non-critical chunks. note that TruePNG should be able to pass the test n°17 but fails on this specific sample (+1 added on score, because it could work on other samples).

ZopfliPNG

zopflipng --lossy_transparent

ZopfliPNG has no multithreading, but processes dirty transparency. it removes all non-critical chunks by default.