Very slow png optimizer
millipng is a .png
meta-optimizer.
A meta-optimizer? millipng is not an optimizer by itself, it just calls multiple existing optimizers (deflopt, defluff, optipng, pngoptimizer, pngout, truepng, zopflipng) in a specific order described by (not mine) analysis here: reddit.com/r/webdev/wiki.
millipng is a lossless png optimizer (except removing exif and alpha channel color info).
millipng is distributed as a docker image. This ensures consistent runtime environment with no configuration on your side (few of the included optimizers require wine to run on non Windows OS, which is already setup in the image).
- โจ Best in class optimization
- ๐ Optimize single file or whole directory
# optimize all pngs in current directory (recursively)
docker run -v "$PWD:/img" matejkosiarcik/millipng
# optimize single png
docker run -v "$PWD/image.png:/img" matejkosiarcik/millipng
When in doubt, get help:
$ docker run matejkosiarcik/millipng --help
usage: millipng [-h] [-V] [-l {fast,default,brute,ultra-brute}] [-n] [-j JOBS]
[-v | -q]
optional arguments:
-h, --help show this help message and exit
-V, --version show program's version number and exit
-l {fast,default,brute,ultra-brute}, --level {fast,default,brute,ultra-brute}
Optimization level
-n, --dry-run Do not actually modify images
-j JOBS, --jobs JOBS Number of parallel jobs/threads to run (default is 0 -
automatically determine according to current cpu)
-v, --verbose Additional logging output
-q, --quiet Suppress default logging output
For maximum optimization, I recommend
- call pngquant before millipng (beware pngquant is lossy)
- use
--level ultra-brute
in millipng (beware this takes a really long time for any sizible png)
Example:
pngquant --strip --speed 1 --skip-if-larger --quality 0-95 --force 'image.png' --output 'image.png'
docker run -v "$PWD/image.png:/img" matejkosiarcik/millipng --level ultra-brute
The project is licensed under LGPLv3. See LICENSE.txt for full details.