Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Comparison of lossless PNG compression tools (olegkikin.com)
36 points by olegkikin on Jan 5, 2010 | hide | past | favorite | 11 comments


Linux, BSD, OSX ports of PNGOut: http://www.jonof.id.au/kenutils


MacOS X droplet GUI arount PNGOut: http://www.gingerbeardman.com/pngenie/


Title made we wonder if there was such a think as lossy PNG - apparently yes: http://membled.com/work/apps/lossy_png/


Any lossless format can be made lossy by simply performing a lossy pre-pass prior to the lossless compression.

The real challenge is finding a good way to perform the pre-pass; it's easy to pick a simple naive method, but optimality is likely exponential-time, or if one is lucky, polynomial with an intractable constant (using trellis).

The fact that PNG uses a dictionary-based compressor instead of a PPMD-like system likely makes the problem much harder.


On rare occasions, running your image through PNGOUT a second time will save you an extra couple bytes.


If that desperate, one could also try:

   for a in 0 128 192 256 512 1024 ; do pngout file.png -b$a ; done
(Or the equivalent for your favorite shell.)


What does PNGout do different? I tried optipng with -o9, which is an exhaustive search, and it didn't make the file as small as the PNGout one.

I though -o9 tried every possible method of encoding the png, but I guess it's missing something.

Edit: I found my answer: http://optipng.sourceforge.net/pngtech/optipng.html - apparently the png filter can be applied to each row independently. But I think optipng uses the same filter for the entire image, not each row.


From optipng’s todo.txt:

  - Compression improvements:
    Use zlib's deflateTune().
    Use 7zip's powerful deflation engine.
    (This is not possible with libpng, so a custom encoder is needed.)
AdvanceCOMP uses the same deflate code as 7zip. PNGout uses a deflation engine that claims to be better than 7zip's.


There doesn't seem to be a Mac or Linux port for PNGOut; the link redirects to a forum about GTA. And isn't PunyPNG a web front-end for OptiPNG? That would explain the lack of any real differences between the two.

Also, would be good to know what flags were used when compressing the images.

// edit: See @ccollins post for a link to Mac/Linux/BSD ports of PNGOut.


Maybe there should be a wrapper that runs them all and spits out the smallest file?


There is one: http://imageoptim.pornel.net/ (not mine) unfortunately it's mac-only.

If I have time left I might try making a linux (Qt?) version myself in the future.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: