55 lines
2.9 KiB
Plaintext
55 lines
2.9 KiB
Plaintext
ZopfliPNG is a command line program to optimize the Portable Network Graphics
|
|
(PNG) images. This version has the following features:
|
|
- uses Zopfli compression for the Deflate compression,
|
|
- compares several strategies for choosing scanline filter codes,
|
|
- chooses a suitable color type to losslessly encode the image,
|
|
- removes all chunks that are unimportant for the typical web use (metadata,
|
|
text, etc...),
|
|
- optionally alters the hidden colors of fully transparent pixels for more
|
|
compression, and,
|
|
- optionally converts 16-bit color channels to 8-bit.
|
|
|
|
This is an alpha-release for testing while improvements, particularly to add
|
|
palette selection, are still being made. Feedback and bug reports are welcome.
|
|
|
|
Important:
|
|
|
|
This PNG optimizer removes ancillary chunks (pieces of metadata) from the
|
|
PNG image that normally do not affect rendering. However in special
|
|
circumstances you may wish to keep some. For example for a design using
|
|
custom gamma correction, keeping it may be desired. Visually check in the
|
|
target renderer after using ZopfliPNG. Use --keepchunks to keep chunks, e.g.
|
|
--keepchunks=gAMA,pHYs to keep gamma and DPI information. This will increase
|
|
file size. The following page contains a list of ancillary PNG chunks:
|
|
http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
|
|
|
|
Build instructions:
|
|
|
|
To build ZopfliPNG, compile all .c, .cc and .cpp files from src/zopfli,
|
|
src/zopflipng and src/zopflipng/lodepng, except src/zopfli/zopfli_bin.c, to a
|
|
single binary with C++, e.g.:
|
|
g++ src/zopfli/{blocksplitter,cache,deflate,gzip_container,hash,katajainen,lz77,squeeze,tree,util,zlib_container,zopfli_lib}.c src/zopflipng/*.cc src/zopflipng/lodepng/*.cpp -O2 -W -Wall -Wextra -Wno-unused-function -ansi -pedantic -o zopflipng
|
|
|
|
A makefile is provided as well, but only for linux: use "make zopflipng" with
|
|
the Zopfli makefile. For other platforms, please use the build instructions
|
|
above instead.
|
|
|
|
The main compression algorithm in ZopfliPNG is ported from WebP lossless, but
|
|
naturally cannot give as much compression gain for PNGs as it does for a more
|
|
modern compression codec like WebP
|
|
https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification.
|
|
|
|
Compared to libpng -- an often used PNG encoder implementation -- ZopfliPNG uses
|
|
2-3 orders of magnitude more CPU time for compression. Initial testing using a
|
|
corpus of 1000 PNGs with translucency, randomly selected from the internet,
|
|
gives a compression improvement of 12% compared to convert -q 95, but only 0.5%
|
|
compared to pngout (from better of /f0 and /f5 runs).
|
|
|
|
By releasing this software we hope to make images on the web load faster without
|
|
a new image format, but the opportunities for optimization within PNG are
|
|
limited. When targeting Android, Chrome, Opera, and Yandex browsers, or by using
|
|
suitable plugins for other browsers, it is good to note that WebP lossless
|
|
images are still 26 % smaller than images recompressed with ZopfliPNG.
|
|
|
|
2013-05-07, Lode Vandevenne and Jyrki Alakuijala
|