Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ImageMagick: Lossless max compression for PNG?

I'd like to achieve a maximum amount of compression when saving to a lossless PNG using ImageMagick. I'm doing batch conversion of many PSDs.

I tried a few things, but it looks to me like the resulting PNG image is not as sharp as original image, although my wife cannot see it.

These are current arguments I'm playing with:

convert -depth 24 -define png:compression-filter=1 \    -define png:compression-level=9 -define png:compression-strategy=2  

According to: http://www.imagemagick.org/script/command-line-options.php#define

And http://www.w3.org/TR/PNG-Filters.html

That means:

  • compression filter is 1 (Sub)
  • max compression level 9
  • compression strategy is 2 huffman_only (so no filtering, although this compression filter shall be lossless)

According to the documentation: "valid values are 0 through 4, meaning default, filtered, huffman_only, rle, and fixed ZLIB compression strategy. If you are using an old zlib that does not support Z_RLE (before 1.2.0) or Z_FIXED (before 1.2.2.2), values 3 and 4, respectively, will use the zlib default strategy instead."

BTW, My images are 960x720 pixels.

(If I use default compression strategy 0, I get large files. It might be that compression-filter of 9 and compression-strategy of 0 are producing smaller size images, but I am still not sure if it is lossless or not).

Questions:

  1. Is this lossless compression? If not, where is the mistake?
  2. Any idea how to achieve better lossless compression?
like image 471
Mladen Adamovic Avatar asked Dec 03 '14 08:12

Mladen Adamovic


People also ask

Does PNG support lossless compression?

Both PNG and TIFF files benefit from lossless compression, meaning that no matter how often you save, open, or resize them, they'll maintain their quality. However, TIFF files offer users a choice between lossy and lossless compression, which can help reduce the file size if this is a priority.

How much can you compress a PNG?

In size, you're typically looking at a 0-10% reduction. It's better than nothing, but if you're looking to heavily compress your PNG images, lossy compression or using WinZip are better ways to go.

Is PNG truly lossless?

As a result, PNG compression is completely lossless - that is, the original image data can be reconstructed exactly, bit for bit - just as in GIF and most forms of TIFF.

How does PNG use lossless compression?

File compression for a PNG is lossless. Like the term indicates, lossless compression retains all of the data contained in the file, within the file, during the process. Lossless compression is necessary when you have images that are still in the editing process.


2 Answers

I think you are at, or beyond, the limits of the ImageMagick documentation and would like to suggest you work out your answer empirically - or if you do get a definitive answer, that you at least test it empirically.

I don't have access to your images, so I generated a reference image myself, as follows. It contains a readily compressible block of solid colour (red), a black-white gradient and a bunch of noise, so there is something to make most types of compression happy or unhappy in there.

enter image description here

In order to test whether you have lossless compression, I would suggest you convert images to PPM format - see here. This contains no date, or time or statistics or anything but pure image data and size in an extremely simple format - thereby allowing comparison of whether pixel values have changed through compression.

Then I wrote a script as follows to compress the reference image using all the possible filters, strategies and levels to see the filesizes and if they have suffered any losses and are therefore different from the reference PPM image:

Here is the script:

#!/bin/bash convert -depth 24 -size 200x200 xc:red gradient:black-white \( xc:white +noise random \) +append reference.png convert reference.png reference.ppm for f in {0..5}; do    for l in {0..9}; do       for s in {0..4}; do          outfile="out_${f}_${l}_${s}.png"          convert reference.png -define png:compression-filter=$f -define png:compression-level=$l -define png:compression-strategy=$s "$outfile"          size=$(OSXFileSize "$outfile")          echo filter:$f, level:$l, strategy:$s, size:$size          convert "$outfile" "$outfile.ppm"          diff "$outfile.ppm" reference.ppm       done    done done 

All files compared identically, so there doesn't seem to be any compression loss with any of the parameters I used. The sizes came out as follows:

filter:0, level:0, strategy:0, size:720796 filter:0, level:0, strategy:1, size:720796 filter:0, level:0, strategy:2, size:720801 filter:0, level:0, strategy:3, size:718136 filter:0, level:0, strategy:4, size:720796 filter:0, level:1, strategy:0, size:246377 filter:0, level:1, strategy:1, size:246377 filter:0, level:1, strategy:2, size:524864 filter:0, level:1, strategy:3, size:517549 filter:0, level:1, strategy:4, size:259348 filter:0, level:2, strategy:0, size:246377 filter:0, level:2, strategy:1, size:246377 filter:0, level:2, strategy:2, size:524864 filter:0, level:2, strategy:3, size:517549 filter:0, level:2, strategy:4, size:259348 filter:0, level:3, strategy:0, size:246377 filter:0, level:3, strategy:1, size:246377 filter:0, level:3, strategy:2, size:524864 filter:0, level:3, strategy:3, size:517549 filter:0, level:3, strategy:4, size:259348 filter:0, level:4, strategy:0, size:244894 filter:0, level:4, strategy:1, size:244859 filter:0, level:4, strategy:2, size:524864 filter:0, level:4, strategy:3, size:517549 filter:0, level:4, strategy:4, size:258039 filter:0, level:5, strategy:0, size:244916 filter:0, level:5, strategy:1, size:244881 filter:0, level:5, strategy:2, size:524864 filter:0, level:5, strategy:3, size:517549 filter:0, level:5, strategy:4, size:258064 filter:0, level:6, strategy:0, size:244916 filter:0, level:6, strategy:1, size:244881 filter:0, level:6, strategy:2, size:524864 filter:0, level:6, strategy:3, size:517549 filter:0, level:6, strategy:4, size:258064 filter:0, level:7, strategy:0, size:244916 filter:0, level:7, strategy:1, size:244881 filter:0, level:7, strategy:2, size:524864 filter:0, level:7, strategy:3, size:517549 filter:0, level:7, strategy:4, size:258064 filter:0, level:8, strategy:0, size:244433 filter:0, level:8, strategy:1, size:244405 filter:0, level:8, strategy:2, size:524864 filter:0, level:8, strategy:3, size:517549 filter:0, level:8, strategy:4, size:257674 filter:0, level:9, strategy:0, size:244433 filter:0, level:9, strategy:1, size:244405 filter:0, level:9, strategy:2, size:524864 filter:0, level:9, strategy:3, size:517549 filter:0, level:9, strategy:4, size:257674 filter:1, level:0, strategy:0, size:720796 filter:1, level:0, strategy:1, size:720796 filter:1, level:0, strategy:2, size:720801 filter:1, level:0, strategy:3, size:286904 filter:1, level:0, strategy:4, size:720796 filter:1, level:1, strategy:0, size:247643 filter:1, level:1, strategy:1, size:247643 filter:1, level:1, strategy:2, size:331829 filter:1, level:1, strategy:3, size:245708 filter:1, level:1, strategy:4, size:260505 filter:1, level:2, strategy:0, size:247375 filter:1, level:2, strategy:1, size:247375 filter:1, level:2, strategy:2, size:331829 filter:1, level:2, strategy:3, size:245708 filter:1, level:2, strategy:4, size:260452 filter:1, level:3, strategy:0, size:247375 filter:1, level:3, strategy:1, size:247375 filter:1, level:3, strategy:2, size:331829 filter:1, level:3, strategy:3, size:245708 filter:1, level:3, strategy:4, size:260452 filter:1, level:4, strategy:0, size:245515 filter:1, level:4, strategy:1, size:245489 filter:1, level:4, strategy:2, size:331829 filter:1, level:4, strategy:3, size:245708 filter:1, level:4, strategy:4, size:258810 filter:1, level:5, strategy:0, size:245544 filter:1, level:5, strategy:1, size:245519 filter:1, level:5, strategy:2, size:331829 filter:1, level:5, strategy:3, size:245708 filter:1, level:5, strategy:4, size:258835 filter:1, level:6, strategy:0, size:245597 filter:1, level:6, strategy:1, size:245570 filter:1, level:6, strategy:2, size:331829 filter:1, level:6, strategy:3, size:245708 filter:1, level:6, strategy:4, size:258885 filter:1, level:7, strategy:0, size:245597 filter:1, level:7, strategy:1, size:245570 filter:1, level:7, strategy:2, size:331829 filter:1, level:7, strategy:3, size:245708 filter:1, level:7, strategy:4, size:258885 filter:1, level:8, strategy:0, size:245251 filter:1, level:8, strategy:1, size:245230 filter:1, level:8, strategy:2, size:331829 filter:1, level:8, strategy:3, size:245708 filter:1, level:8, strategy:4, size:258587 filter:1, level:9, strategy:0, size:245267 filter:1, level:9, strategy:1, size:245254 filter:1, level:9, strategy:2, size:331829 filter:1, level:9, strategy:3, size:245708 filter:1, level:9, strategy:4, size:258589 filter:2, level:0, strategy:0, size:720796 filter:2, level:0, strategy:1, size:720796 filter:2, level:0, strategy:2, size:720801 filter:2, level:0, strategy:3, size:628470 filter:2, level:0, strategy:4, size:720796 filter:2, level:1, strategy:0, size:246114 filter:2, level:1, strategy:1, size:246114 filter:2, level:1, strategy:2, size:439545 filter:2, level:1, strategy:3, size:358177 filter:2, level:1, strategy:4, size:258999 filter:2, level:2, strategy:0, size:246114 filter:2, level:2, strategy:1, size:246114 filter:2, level:2, strategy:2, size:439545 filter:2, level:2, strategy:3, size:358177 filter:2, level:2, strategy:4, size:258999 filter:2, level:3, strategy:0, size:246114 filter:2, level:3, strategy:1, size:246114 filter:2, level:3, strategy:2, size:439545 filter:2, level:3, strategy:3, size:358177 filter:2, level:3, strategy:4, size:258999 filter:2, level:4, strategy:0, size:244701 filter:2, level:4, strategy:1, size:244679 filter:2, level:4, strategy:2, size:439545 filter:2, level:4, strategy:3, size:358177 filter:2, level:4, strategy:4, size:257722 filter:2, level:5, strategy:0, size:244721 filter:2, level:5, strategy:1, size:244700 filter:2, level:5, strategy:2, size:439545 filter:2, level:5, strategy:3, size:358177 filter:2, level:5, strategy:4, size:257744 filter:2, level:6, strategy:0, size:244727 filter:2, level:6, strategy:1, size:244704 filter:2, level:6, strategy:2, size:439545 filter:2, level:6, strategy:3, size:358177 filter:2, level:6, strategy:4, size:257744 filter:2, level:7, strategy:0, size:244727 filter:2, level:7, strategy:1, size:244704 filter:2, level:7, strategy:2, size:439545 filter:2, level:7, strategy:3, size:358177 filter:2, level:7, strategy:4, size:257744 filter:2, level:8, strategy:0, size:244340 filter:2, level:8, strategy:1, size:244322 filter:2, level:8, strategy:2, size:439545 filter:2, level:8, strategy:3, size:358177 filter:2, level:8, strategy:4, size:257436 filter:2, level:9, strategy:0, size:244155 filter:2, level:9, strategy:1, size:244130 filter:2, level:9, strategy:2, size:439545 filter:2, level:9, strategy:3, size:358177 filter:2, level:9, strategy:4, size:257298 filter:3, level:0, strategy:0, size:720796 filter:3, level:0, strategy:1, size:720796 filter:3, level:0, strategy:2, size:720801 filter:3, level:0, strategy:3, size:600694 filter:3, level:0, strategy:4, size:720796 filter:3, level:1, strategy:0, size:247741 filter:3, level:1, strategy:1, size:247741 filter:3, level:1, strategy:2, size:429487 filter:3, level:1, strategy:3, size:346943 filter:3, level:1, strategy:4, size:260468 filter:3, level:2, strategy:0, size:247711 filter:3, level:2, strategy:1, size:247711 filter:3, level:2, strategy:2, size:429487 filter:3, level:2, strategy:3, size:346943 filter:3, level:2, strategy:4, size:260444 filter:3, level:3, strategy:0, size:247463 filter:3, level:3, strategy:1, size:247463 filter:3, level:3, strategy:2, size:429487 filter:3, level:3, strategy:3, size:346943 filter:3, level:3, strategy:4, size:260331 filter:3, level:4, strategy:0, size:245681 filter:3, level:4, strategy:1, size:245659 filter:3, level:4, strategy:2, size:429487 filter:3, level:4, strategy:3, size:346943 filter:3, level:4, strategy:4, size:258797 filter:3, level:5, strategy:0, size:245685 filter:3, level:5, strategy:1, size:245663 filter:3, level:5, strategy:2, size:429487 filter:3, level:5, strategy:3, size:346943 filter:3, level:5, strategy:4, size:258796 filter:3, level:6, strategy:0, size:245686 filter:3, level:6, strategy:1, size:245665 filter:3, level:6, strategy:2, size:429487 filter:3, level:6, strategy:3, size:346943 filter:3, level:6, strategy:4, size:258796 filter:3, level:7, strategy:0, size:245686 filter:3, level:7, strategy:1, size:245665 filter:3, level:7, strategy:2, size:429487 filter:3, level:7, strategy:3, size:346943 filter:3, level:7, strategy:4, size:258796 filter:3, level:8, strategy:0, size:245474 filter:3, level:8, strategy:1, size:245458 filter:3, level:8, strategy:2, size:429487 filter:3, level:8, strategy:3, size:346943 filter:3, level:8, strategy:4, size:258628 filter:3, level:9, strategy:0, size:245508 filter:3, level:9, strategy:1, size:245491 filter:3, level:9, strategy:2, size:429487 filter:3, level:9, strategy:3, size:346943 filter:3, level:9, strategy:4, size:258639 filter:4, level:0, strategy:0, size:720796 filter:4, level:0, strategy:1, size:720796 filter:4, level:0, strategy:2, size:720801 filter:4, level:0, strategy:3, size:284043 filter:4, level:0, strategy:4, size:720796 filter:4, level:1, strategy:0, size:246892 filter:4, level:1, strategy:1, size:246892 filter:4, level:1, strategy:2, size:331489 filter:4, level:1, strategy:3, size:245305 filter:4, level:1, strategy:4, size:259428 filter:4, level:2, strategy:0, size:246299 filter:4, level:2, strategy:1, size:246299 filter:4, level:2, strategy:2, size:331489 filter:4, level:2, strategy:3, size:245305 filter:4, level:2, strategy:4, size:259021 filter:4, level:3, strategy:0, size:246316 filter:4, level:3, strategy:1, size:246316 filter:4, level:3, strategy:2, size:331489 filter:4, level:3, strategy:3, size:245305 filter:4, level:3, strategy:4, size:259026 filter:4, level:4, strategy:0, size:244335 filter:4, level:4, strategy:1, size:244259 filter:4, level:4, strategy:2, size:331489 filter:4, level:4, strategy:3, size:245305 filter:4, level:4, strategy:4, size:257491 filter:4, level:5, strategy:0, size:244343 filter:4, level:5, strategy:1, size:244260 filter:4, level:5, strategy:2, size:331489 filter:4, level:5, strategy:3, size:245305 filter:4, level:5, strategy:4, size:257494 filter:4, level:6, strategy:0, size:244350 filter:4, level:6, strategy:1, size:244262 filter:4, level:6, strategy:2, size:331489 filter:4, level:6, strategy:3, size:245305 filter:4, level:6, strategy:4, size:257500 filter:4, level:7, strategy:0, size:244350 filter:4, level:7, strategy:1, size:244262 filter:4, level:7, strategy:2, size:331489 filter:4, level:7, strategy:3, size:245305 filter:4, level:7, strategy:4, size:257500 filter:4, level:8, strategy:0, size:244282 filter:4, level:8, strategy:1, size:244251 filter:4, level:8, strategy:2, size:331489 filter:4, level:8, strategy:3, size:245305 filter:4, level:8, strategy:4, size:257461 filter:4, level:9, strategy:0, size:244321 filter:4, level:9, strategy:1, size:244284 filter:4, level:9, strategy:2, size:331489 filter:4, level:9, strategy:3, size:245305 filter:4, level:9, strategy:4, size:257473 filter:5, level:0, strategy:0, size:720796 filter:5, level:0, strategy:1, size:720796 filter:5, level:0, strategy:2, size:720801 filter:5, level:0, strategy:3, size:287526 filter:5, level:0, strategy:4, size:720796 filter:5, level:1, strategy:0, size:247117 filter:5, level:1, strategy:1, size:247117 filter:5, level:1, strategy:2, size:331910 filter:5, level:1, strategy:3, size:246241 filter:5, level:1, strategy:4, size:259811 filter:5, level:2, strategy:0, size:246903 filter:5, level:2, strategy:1, size:246903 filter:5, level:2, strategy:2, size:331910 filter:5, level:2, strategy:3, size:246241 filter:5, level:2, strategy:4, size:259757 filter:5, level:3, strategy:0, size:246976 filter:5, level:3, strategy:1, size:246976 filter:5, level:3, strategy:2, size:331910 filter:5, level:3, strategy:3, size:246241 filter:5, level:3, strategy:4, size:259742 filter:5, level:4, strategy:0, size:245005 filter:5, level:4, strategy:1, size:244969 filter:5, level:4, strategy:2, size:331910 filter:5, level:4, strategy:3, size:246241 filter:5, level:4, strategy:4, size:258135 filter:5, level:5, strategy:0, size:245025 filter:5, level:5, strategy:1, size:244985 filter:5, level:5, strategy:2, size:331910 filter:5, level:5, strategy:3, size:246241 filter:5, level:5, strategy:4, size:258149 filter:5, level:6, strategy:0, size:245056 filter:5, level:6, strategy:1, size:245009 filter:5, level:6, strategy:2, size:331910 filter:5, level:6, strategy:3, size:246241 filter:5, level:6, strategy:4, size:258176 filter:5, level:7, strategy:0, size:245056 filter:5, level:7, strategy:1, size:245009 filter:5, level:7, strategy:2, size:331910 filter:5, level:7, strategy:3, size:246241 filter:5, level:7, strategy:4, size:258176 filter:5, level:8, strategy:0, size:244838 filter:5, level:8, strategy:1, size:244841 filter:5, level:8, strategy:2, size:331910 filter:5, level:8, strategy:3, size:246241 filter:5, level:8, strategy:4, size:258009 filter:5, level:9, strategy:0, size:244857 filter:5, level:9, strategy:1, size:244857 filter:5, level:9, strategy:2, size:331910 filter:5, level:9, strategy:3, size:246241 filter:5, level:9, strategy:4, size:258009 

Obviously your numbers will be different, as your images are different, so you will have to see what works for your data - but hopefully this will be a starting point.

Note that if I sort the above by size, I get this:

filter:2, level:9, strategy:1, size:244127 filter:2, level:9, strategy:0, size:244156 filter:4, level:8, strategy:1, size:244251 filter:4, level:4, strategy:1, size:244258 filter:4, level:5, strategy:1, size:244260 filter:4, level:6, strategy:1, size:244262 filter:4, level:7, strategy:1, size:244262 filter:4, level:8, strategy:0, size:244283 filter:4, level:9, strategy:1, size:244285 filter:2, level:8, strategy:1, size:244319 filter:4, level:9, strategy:0, size:244321 filter:4, level:4, strategy:0, size:244333 filter:2, level:8, strategy:0, size:244341 filter:4, level:5, strategy:0, size:244341 filter:4, level:6, strategy:0, size:244350 filter:4, level:7, strategy:0, size:244350 filter:0, level:8, strategy:1, size:244408 filter:0, level:9, strategy:1, size:244408 filter:0, level:8, strategy:0, size:244442 filter:0, level:9, strategy:0, size:244442 filter:2, level:4, strategy:1, size:244677 filter:2, level:5, strategy:1, size:244699 filter:2, level:4, strategy:0, size:244701 filter:2, level:6, strategy:1, size:244704 filter:2, level:7, strategy:1, size:244704 filter:2, level:5, strategy:0, size:244723 filter:2, level:6, strategy:0, size:244729 filter:2, level:7, strategy:0, size:244729 filter:5, level:8, strategy:1, size:244813 filter:5, level:8, strategy:0, size:244822 filter:5, level:9, strategy:1, size:244840 filter:5, level:9, strategy:0, size:244853 filter:0, level:4, strategy:1, size:244860 filter:0, level:5, strategy:1, size:244885 filter:0, level:6, strategy:1, size:244885 filter:0, level:7, strategy:1, size:244885 filter:0, level:4, strategy:0, size:244897 filter:0, level:5, strategy:0, size:244922 filter:0, level:6, strategy:0, size:244922 filter:0, level:7, strategy:0, size:244922 filter:5, level:4, strategy:1, size:244940 filter:5, level:5, strategy:1, size:244956 filter:5, level:6, strategy:1, size:244980 filter:5, level:7, strategy:1, size:244980 filter:5, level:4, strategy:0, size:244982 filter:5, level:5, strategy:0, size:245000 filter:5, level:6, strategy:0, size:245030 filter:5, level:7, strategy:0, size:245030 filter:1, level:8, strategy:1, size:245243 filter:1, level:9, strategy:1, size:245245 filter:1, level:8, strategy:0, size:245267 filter:1, level:9, strategy:0, size:245270 filter:4, level:1, strategy:3, size:245307 filter:4, level:2, strategy:3, size:245307 filter:4, level:3, strategy:3, size:245307 filter:4, level:4, strategy:3, size:245307 filter:4, level:5, strategy:3, size:245307 filter:4, level:6, strategy:3, size:245307 filter:4, level:7, strategy:3, size:245307 filter:4, level:8, strategy:3, size:245307 filter:4, level:9, strategy:3, size:245307 filter:3, level:8, strategy:1, size:245460 filter:5, level:1, strategy:3, size:245469 filter:5, level:2, strategy:3, size:245469 filter:5, level:3, strategy:3, size:245469 filter:5, level:4, strategy:3, size:245469 filter:5, level:5, strategy:3, size:245469 filter:5, level:6, strategy:3, size:245469 filter:5, level:7, strategy:3, size:245469 filter:5, level:8, strategy:3, size:245469 filter:5, level:9, strategy:3, size:245469 filter:3, level:8, strategy:0, size:245487 filter:3, level:9, strategy:1, size:245493 filter:1, level:4, strategy:1, size:245503 filter:3, level:9, strategy:0, size:245521 filter:1, level:4, strategy:0, size:245529 filter:1, level:5, strategy:1, size:245533 filter:1, level:5, strategy:0, size:245559 filter:1, level:6, strategy:1, size:245584 filter:1, level:7, strategy:1, size:245584 filter:1, level:6, strategy:0, size:245606 filter:1, level:7, strategy:0, size:245606 filter:3, level:4, strategy:1, size:245663 filter:3, level:5, strategy:1, size:245668 filter:3, level:6, strategy:1, size:245669 filter:3, level:7, strategy:1, size:245669 filter:3, level:4, strategy:0, size:245696 filter:3, level:5, strategy:0, size:245700 filter:3, level:6, strategy:0, size:245701 filter:3, level:7, strategy:0, size:245701 filter:1, level:1, strategy:3, size:245704 filter:1, level:2, strategy:3, size:245704 filter:1, level:3, strategy:3, size:245704 filter:1, level:4, strategy:3, size:245704 filter:1, level:5, strategy:3, size:245704 filter:1, level:6, strategy:3, size:245704 filter:1, level:7, strategy:3, size:245704 filter:1, level:8, strategy:3, size:245704 filter:1, level:9, strategy:3, size:245704 filter:2, level:1, strategy:0, size:245967 filter:2, level:1, strategy:1, size:245967 filter:2, level:2, strategy:0, size:245967 filter:2, level:2, strategy:1, size:245967 filter:2, level:3, strategy:0, size:245967 filter:2, level:3, strategy:1, size:245967 filter:4, level:2, strategy:0, size:246294 filter:4, level:2, strategy:1, size:246294 filter:4, level:3, strategy:0, size:246309 filter:4, level:3, strategy:1, size:246309 filter:0, level:1, strategy:0, size:246391 filter:0, level:1, strategy:1, size:246391 filter:0, level:2, strategy:0, size:246391 filter:0, level:2, strategy:1, size:246391 filter:0, level:3, strategy:0, size:246391 filter:0, level:3, strategy:1, size:246391 filter:4, level:1, strategy:0, size:246407 filter:4, level:1, strategy:1, size:246407 filter:5, level:2, strategy:0, size:246920 filter:5, level:2, strategy:1, size:246920 filter:5, level:1, strategy:0, size:246926 filter:5, level:1, strategy:1, size:246926 filter:5, level:3, strategy:0, size:246955 filter:5, level:3, strategy:1, size:246955 filter:1, level:2, strategy:0, size:247380 filter:1, level:2, strategy:1, size:247380 filter:1, level:3, strategy:0, size:247380 filter:1, level:3, strategy:1, size:247380 filter:3, level:1, strategy:0, size:247619 filter:3, level:1, strategy:1, size:247619 filter:3, level:2, strategy:0, size:247704 filter:3, level:2, strategy:1, size:247704 filter:3, level:3, strategy:0, size:247725 filter:3, level:3, strategy:1, size:247725 filter:1, level:1, strategy:0, size:247811 filter:1, level:1, strategy:1, size:247811 filter:2, level:9, strategy:4, size:257312 filter:2, level:8, strategy:4, size:257451 filter:4, level:8, strategy:4, size:257506 filter:4, level:9, strategy:4, size:257519 filter:4, level:4, strategy:4, size:257536 filter:4, level:5, strategy:4, size:257539 filter:4, level:6, strategy:4, size:257546 filter:4, level:7, strategy:4, size:257546 filter:0, level:8, strategy:4, size:257721 filter:0, level:9, strategy:4, size:257721 filter:2, level:4, strategy:4, size:257737 filter:2, level:5, strategy:4, size:257759 filter:2, level:6, strategy:4, size:257759 filter:2, level:7, strategy:4, size:257759 filter:5, level:8, strategy:4, size:258068 filter:5, level:9, strategy:4, size:258075 filter:0, level:4, strategy:4, size:258081 filter:0, level:5, strategy:4, size:258105 filter:0, level:6, strategy:4, size:258105 filter:0, level:7, strategy:4, size:258105 filter:5, level:4, strategy:4, size:258190 filter:5, level:5, strategy:4, size:258203 filter:5, level:6, strategy:4, size:258230 filter:5, level:7, strategy:4, size:258230 filter:3, level:8, strategy:4, size:258614 filter:1, level:8, strategy:4, size:258625 filter:1, level:9, strategy:4, size:258625 filter:3, level:9, strategy:4, size:258626 filter:3, level:5, strategy:4, size:258783 filter:3, level:6, strategy:4, size:258783 filter:3, level:7, strategy:4, size:258783 filter:3, level:4, strategy:4, size:258784 filter:1, level:4, strategy:4, size:258847 filter:1, level:5, strategy:4, size:258872 filter:1, level:6, strategy:4, size:258922 filter:1, level:7, strategy:4, size:258922 filter:2, level:1, strategy:4, size:258953 filter:2, level:2, strategy:4, size:258953 filter:2, level:3, strategy:4, size:258953 filter:4, level:2, strategy:4, size:259066 filter:4, level:3, strategy:4, size:259070 filter:4, level:1, strategy:4, size:259143 filter:0, level:1, strategy:4, size:259394 filter:0, level:2, strategy:4, size:259394 filter:0, level:3, strategy:4, size:259394 filter:5, level:3, strategy:4, size:259786 filter:5, level:2, strategy:4, size:259810 filter:5, level:1, strategy:4, size:259811 filter:3, level:1, strategy:4, size:260389 filter:3, level:2, strategy:4, size:260449 filter:3, level:3, strategy:4, size:260473 filter:1, level:2, strategy:4, size:260490 filter:1, level:3, strategy:4, size:260490 filter:1, level:1, strategy:4, size:260568 filter:4, level:0, strategy:3, size:284075 filter:5, level:0, strategy:3, size:284320 filter:1, level:0, strategy:3, size:286960 filter:4, level:1, strategy:2, size:331440 filter:4, level:2, strategy:2, size:331440 filter:4, level:3, strategy:2, size:331440 filter:4, level:4, strategy:2, size:331440 filter:4, level:5, strategy:2, size:331440 filter:4, level:6, strategy:2, size:331440 filter:4, level:7, strategy:2, size:331440 filter:4, level:8, strategy:2, size:331440 filter:4, level:9, strategy:2, size:331440 filter:5, level:1, strategy:2, size:331550 filter:5, level:2, strategy:2, size:331550 filter:5, level:3, strategy:2, size:331550 filter:5, level:4, strategy:2, size:331550 filter:5, level:5, strategy:2, size:331550 filter:5, level:6, strategy:2, size:331550 filter:5, level:7, strategy:2, size:331550 filter:5, level:8, strategy:2, size:331550 filter:5, level:9, strategy:2, size:331550 filter:1, level:1, strategy:2, size:331823 filter:1, level:2, strategy:2, size:331823 filter:1, level:3, strategy:2, size:331823 filter:1, level:4, strategy:2, size:331823 filter:1, level:5, strategy:2, size:331823 filter:1, level:6, strategy:2, size:331823 filter:1, level:7, strategy:2, size:331823 filter:1, level:8, strategy:2, size:331823 filter:1, level:9, strategy:2, size:331823 filter:3, level:1, strategy:3, size:346952 filter:3, level:2, strategy:3, size:346952 filter:3, level:3, strategy:3, size:346952 filter:3, level:4, strategy:3, size:346952 filter:3, level:5, strategy:3, size:346952 filter:3, level:6, strategy:3, size:346952 filter:3, level:7, strategy:3, size:346952 filter:3, level:8, strategy:3, size:346952 filter:3, level:9, strategy:3, size:346952 filter:2, level:1, strategy:3, size:358276 filter:2, level:2, strategy:3, size:358276 filter:2, level:3, strategy:3, size:358276 filter:2, level:4, strategy:3, size:358276 filter:2, level:5, strategy:3, size:358276 filter:2, level:6, strategy:3, size:358276 filter:2, level:7, strategy:3, size:358276 filter:2, level:8, strategy:3, size:358276 filter:2, level:9, strategy:3, size:358276 filter:3, level:1, strategy:2, size:429431 filter:3, level:2, strategy:2, size:429431 filter:3, level:3, strategy:2, size:429431 filter:3, level:4, strategy:2, size:429431 filter:3, level:5, strategy:2, size:429431 filter:3, level:6, strategy:2, size:429431 filter:3, level:7, strategy:2, size:429431 filter:3, level:8, strategy:2, size:429431 ... 
like image 191
Mark Setchell Avatar answered Sep 17 '22 18:09

Mark Setchell


I would not rely on ImageMagick only, when compressing PNGs (unless there is some reason outside your own control that forces you to ImageMagick).

A good alternative to compare ImageMagick's results against, is pngcrush, or a newer successor to it, optipng.

Both of these do in general achieve better results when it comes to optimization and compression than ImageMagick does. Frequently, they are also slower than IM, because they can brute-force different methods, and then keep the smallest result only.

Having said that, now on with ImageMagick...


The standard way to define PNG quality with convert is with the -quality {level}{filter} parameter.

You are right in using the more fine-grained controls you gain by using a combination of -define png:... controls, though.

-quality for PNG is very unlike JPEG's quality setting (which simply is an integer from 0 to 100).

For PNG it is composed -- composed by two single digits:

  • The first digit ({level}) is (largely) the zlib compression level, and it may go from 0 to 9.
    (However, the setting of 0 has a special meaning: when you use it you'll get Huffman compression, not zlib compression level 0. This is often better... Weird but true.)

  • The second digit ({filter}) is the PNG data encoding filter type (before it is compressed):

    • 0 means none,
    • 1 means "sub",
    • 2 means "up",
    • 3 means "average",
    • 4 means "Paeth", and
    • 5 means "adaptive".

In practical terms that results in:

  • For illustrations with solid sequences of color Huffman compression with a "none" filter (-quality 00) is typically the most appropriate.
  • For photos of natural landscapes an "adaptive" filtering (-quality 05) is generally the best.

To translate this into your command line syntax, try the following setting:

 -define png:compression-level=0  \  -define png:compression-filter=5 \   -define png:compression-strategy=2  

Last, if I want to really compare the different (but close) sharpness levels of an image after compression, I frequently make use of Fred Weinstein's wonderful flicker_cmp script.

Let your wife test it... :-)


P.S.: Here is a good guide about the technicalities of PNG compression.

like image 26
Kurt Pfeifle Avatar answered Sep 19 '22 18:09

Kurt Pfeifle