Benchmark / Comparison
- pngquant vs pngcrush vs optipng vs pngnq (2014):
pngquantandpngnqhave offer the best reduction,optipngandpngcrushretain the best quality - Zopfli Optimization: Literally Free Bandwidth (2016)
| Package | Compression | Reduction |
|---|---|---|
| pngquant | Lossy | 58% |
| Zopfli | Lossless | 16% |
| Pngcrush | Lossless | 5% |
NOTE: The optimization is run with default configuration on 4 png images of 1024x1024 with foreground text and background image.
NOTE: Kraken Lossy could compress better than pngquant default configuration, achieving 63% compression.
Available options
Zopfli
Install
git clone https://github.com/google/zopfli.gitcd zopflimake zopflipngTest
./zopflipngAllow access command from anywhere (e.g. /usr/bin or ~/bin)
sudo ln -s /<INSTALL_DIR>/zopfli/zopflipng /usr/bin/zopflipngzopflipngUsage
zopflipng source.png output.pngNOTE: The process is quite slow, 10s for a 140Kb file.
NOTE: output.png is only generated if smaller.
Overwrite source file
zopflipng source.png output.png && [ -f output.png ] && mv output.png source.pngProces all PNG files and append prefix to output files (output is zopfli_source.png)
zopflipng --prefix *.pngReplace original source files.
rename -f 's/(zopfli_)(.*)\.png/$2\.png/' *Batch process all PNG files in directory.
find . -name '*.png' -print0 | xargs -0 -n1 -I{} sh -c 'zopflipng {} output.png; [ -f output.png ] && mv output.png {};'NOTE: You can use zopfli with AdvanceCOMP / advdef.
pngquant
sudo apt-get install pngquantor build from source
git clone --recursive https://github.com/kornelski/pngquant.gitcd pngquantmakesudo ln -s /<INSTALL_DIR>/pngquant/pngquant /usr/bin/pngquantUsage
pngquant source.png -o output.pngOverwrite source file
pngquant -f --ext .png source.pngBatch process all PNG files in directory.
pngquant -f --ext .png *.pngPngcrush
Install
sudo apt-get install pngcrushUsage
pngcrush source.png output.pngOverwrite source file
pngcrush -ow source.pngProcess all PNG files and output to a directory (e.g. tmp, sadly cannot output and overwrite current directory)
pngcrush -d tmp *.pngMove files from tmp to replace original source files.
mv tmp/* .rmdir tmpBatch process all PNG files in directory.
find . -name '*.png' -print0 | xargs -0 -n1 pngcrush -owNOTE: http://manpages.ubuntu.com/manpages/xenial/man1/pngcrush.1.html