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 - 3 2bc50da 1.83 295 342 1.66 14 522 5.51 215 762 10.37 177 914
ECT - 5 2bc50da 2.55 296 575 2.54 15 954 7.63 219 441 13.78 184 663
ECT - 9 2bc50da 23.19 305 776 22.33 16 569 71.88 228 023 126.61 204 425
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 - s1 0.54 0.75 308 100 0.41 30 785 1.82 204 090 2.60 118 050
pingo - s2 0.54 0.94 317 069 0.64 39 929 2.79 216 059 4.51 178 941
Pngcrush custom 1.8.6 3.16 244 147 2.32 378 13.31 156 208 28.97 45 521
PngOptimizer - 2.5 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 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 * 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 -s1 ok ok ok ok ok ok ok ok ok ok ok ok ok ok bad ok ok ok ok ok ok bad ok ok
pingo -s2 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

PNG optimization tools evaluation
image reductions speed optimization
rank tool score rank tool total time rank tool total saved
1 TruePNG -o4 22+1 1 advpng -z2 4.86 1 ECT -9 754 793
1 pingo -s2 23 2 pingo -s1 5.58 2 pingo -s2 751 998
2 TruePNG -o1 -a1 21,5 3 advdef -z2 6.56 3 ECT -5 716 633
3 pingo -s1 21 4 pingo -s2 8.88 4 pngwolf (zopfli) 710 973
4 TruePNG -o1 20,5 5 PngOptimizer 9.36 5 ECT -3 703 540
5 ECT -9 17 6 ECT -3 19.37 6 ZopfliPNG 695 056
5 ECT -5 17 7 TruePNG -o1 27.50 7 pingo -s1 661 025
5 ECT -3 17 8 OptiPNG -o2 29.97 8 pngwolf (libdeflate) 654 210
6 ZopfliPNG 17 9 ECT -5 30.06 9 TruePNG -o4 587 915
7 PngOptimizer 12,5 10 Pngcrush 47.76 10 TruePNG -o1 -a1 573 305
8 OptiPNG -o7 12,5 11 pngwolf (libdeflate) 82.10 11 TruePNG -o1 551 734
8 OptiPNG -o2 12,5 12 TruePNG -o1 -a1 136.23 12 PngOptimizer 461 118
9 PNGOUT 7,5 13 ECT -9 244.01 13 Pngcrush 446 254
10 Pngcrush 7 14 advpng -z4 247.12 14 PNGOUT 439 685
11 pngwolf (zopfli) 3,5 15 advdef -z4 253.01 15 OptiPNG -o7 319 414
11 pngwolf (libdeflate) 3,5 16 PNGOUT 299.81 16 OptiPNG -o2 311 218
12 advpng -z4 2,5 17 TruePNG -o4 355.18 17 advdef -z4 244 089
12 advpng -z2 2,5 18 pngwolf (zopfli) 393.66 18 advdef -z2 208 651
13 advdef -z4 1 19 ZopfliPNG 413.52 19 advpng -z4 89 680
13 advdef -z2 1 20 OptiPNG -o7 459.75 20 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.