The pngquant utility converts 32-bit RGBA PNGs to 8-bit RGBA-palette PNGs (or fewer than 8 bits, if you want), via quantization and ordered or diffusion (Floyd-Steinberg) dithering. You can also use it on RGB or even palette images (for example, to further color-reduce them to 16 colors). It does: - nice reduction of all PNG image types to 256-color (or smaller) palette - automatic optimization of tRNS chunks - batch conversion of multiple files (e.g., "pngquant 256 *.png") - Unix-style command-line filtering (e.g., "... | pngquant 16 | ...") It does still lack a few features: - no ancillary chunk preservation (except gAMA) - no preservation of significant-bits info after rescaling (sBIT chunk) - no mapfile support - no "native" handling of 16-bit-per-sample files or gray+alpha files (all samples are truncated to 8 bits and all images are promoted to RGBA before quantization) By the way, be sure to check "before" and "after" file sizes, preferably with pngcrush (http://pmt.sourceforge.net/pngcrush/); dithered palette images may be four times smaller to begin with, but they do not compress nearly as well as grayscale and truecolor images. Some images, such as Henri Sivonen's alpha button (http://www.pp.htv.fi/hsivone1/css-test/bitmapstyle.html), can be made smaller as full 32-bit RGBA images (4076 bytes in this case) than as either FS-dithered palette (4550 bytes) or ordered-dither palette (4482 bytes) images. WWW: http://www.libpng.org/pub/png/apps/pngquant.html