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 8a6059e 0.47 272 356 0.36 2423 1.79 156 652 4.37 42 357
ECT - 3 8a6059e 1.78 295 216 1.84 14 504 5.23 214 997 8.04 171 410
ECT - 5 8a6059e 2.72 295 142 2.55 15 953 9.63 207 166 12.08 189 990
ECT custom 8a6059e 6.10 298 850 6.25 22 692 26.88 219 213 38.11 191 831
ECT - 9 8a6059e 16.52 302 666 14.50 16 563 35.46 209 957 41.34 208 591
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.85 0.23 300 390 0.33 22 606 0.48 173 990 1.12 109 441
pingo - s1 0.85 0.36 303 365 0.66 36 469 0.81 195 816 1.70 152 653
pingo - s2 0.85 0.73 309 111 0.95 39 376 1.33 205 924 2.96 174 600
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
pingo -s1 19,5
pingo -s2 19
pingo -s0 19
ECT -9 17
ECT (custom) 17
ECT -5 17
ECT -3 17
ZopfliPNG 17
ECT -1 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.16
pingo -s1 3.53
advpng -z2 4.86
pingo -s2 5.97
ECT -1 6.99
advdef -z2 6.56
PngOptimizer 9.36
ECT -3 16.89
TruePNG -o1 27.50
OptiPNG -o2 29.97
ECT -5 26.98
Pngcrush 47.76
ECT (custom) 77.34
pngwolf (libdeflate) 82.10
ECT -9 107.82
TruePNG -o1 -a1 136.23
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 737 777
ECT (custom) 732 586
pingo -s2 729 011
pngwolf (zopfli) 710 973
ECT -5 708 251
ECT -3 696 127
ZopfliPNG 695 056
pingo -s1 688 303
pngwolf (libdeflate) 654 210
pingo -s0 606 427
TruePNG -o4 587 915
TruePNG -o1 -a1 573 305
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 -s --mt-deflate=4

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

ect -5 -s --allfilters-c --pal_sort=2 --mt-deflate=4

custom settings for lower number of iterations but better reductions (filtering/palette). note that higher number in --pal_sort will increase time more than results in this test.

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.