web-dev-qa-db-fra.com

ImageMagick: compression maximale sans perte pour PNG?

J'aimerais obtenir une compression maximale lors de l'enregistrement dans un PNG sans perte à l'aide d'ImageMagick. Je fais la conversion par lots de nombreux PSD.

J'ai essayé quelques choses, mais il me semble que l'image PNG résultante n'est pas aussi nette que l'image d'origine, bien que ma femme ne puisse pas la voir.

Voici les arguments actuels avec lesquels je joue:

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

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

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

Cela signifie:

  • le filtre de compression est 1 (Sub)
  • niveau de compression max 9
  • la stratégie de compression est 2 huffman_only (donc pas de filtrage, bien que ce filtre de compression soit sans perte)

Selon la documentation: "les valeurs valides sont comprises entre 0 et 4, ce qui signifie la stratégie de compression ZLIB par défaut, filtrée, huffman_only, rle et fixe. Si vous utilisez un ancien zlib qui ne prend pas en charge Z_RLE ( avant 1.2.0) ou Z_FIXED (avant 1.2.2.2), les valeurs 3 et 4, respectivement, utiliseront la stratégie par défaut zlib à la place. "

BTW, Mes images sont 960x720 pixels.

(Si j'utilise la stratégie de compression par défaut 0, j'obtiens des fichiers volumineux. Il se peut que le filtre de compression de 9 et la stratégie de compression de 0 produisent des images de plus petite taille, mais je ne sais toujours pas si elles sont sans perte ou non).

Des questions:

  1. S'agit-il d'une compression sans perte? Sinon, où est l'erreur?
  2. Une idée de comment obtenir une meilleure compression sans perte?
30
Mladen Adamovic

Je pense que vous êtes aux limites de la documentation d'ImageMagick ou au-delà et que vous souhaitez suggérer de travailler empiriquement votre réponse - ou si vous obtenez une réponse définitive, que vous la testiez au moins empiriquement.

Je n'ai pas accès à vos images, j'ai donc généré moi-même une image de référence, comme suit. Il contient un bloc de couleur unie facilement compressible (rouge), un dégradé noir-blanc et un tas de bruit, il y a donc quelque chose pour rendre la plupart des types de compression heureux ou malheureux.

enter image description here

Afin de tester si vous avez une compression sans perte, je vous suggère de convertir les images au format PPM - voir ici . Cela ne contient ni date, ni heure, ni statistiques, ni rien d'autre que des données et une taille d'image pures dans un format extrêmement simple, permettant ainsi de comparer si les valeurs des pixels ont changé par compression.

Ensuite, j'ai écrit un script comme suit pour compresser l'image de référence en utilisant tous les filtres, stratégies et niveaux possibles pour voir les tailles de fichiers et s'ils ont subi des pertes et sont donc différents de l'image de référence PPM:

Voici le 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

Tous les fichiers sont comparés de manière identique, il ne semble donc pas y avoir de perte de compression avec l'un des paramètres que j'ai utilisés. Les tailles sont sorties comme suit:

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

De toute évidence, vos chiffres seront différents, car vos images sont différentes, vous devrez donc voir ce qui fonctionne pour vos données - mais j'espère que ce sera un point de départ.

Notez que si je trie ce qui précède par taille, j'obtiens ceci:

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
...
50
Mark Setchell

Je ne m'appuierais pas uniquement sur ImageMagick lors de la compression de fichiers PNG (sauf s'il existe une raison indépendante de votre volonté qui vous oblige à ImageMagick).

Une bonne alternative pour comparer les résultats d'ImageMagick est pngcrush, ou un successeur plus récent, optipng.

Les deux obtiennent généralement de meilleurs résultats en matière d'optimisation et de compression que ImageMagick. Souvent, ils sont également plus lents que la messagerie instantanée, car ils peuvent forcer différentes méthodes par force brute, puis ne conserver que le plus petit résultat.

Cela dit, maintenant avec ImageMagick ...


La façon standard de définir la qualité PNG avec convert est avec le -quality {level}{filter} paramètre.

Vous avez raison d'utiliser les contrôles les plus fins que vous gagnez en utilisant une combinaison de -define png:... contrôles, cependant.

-quality pour PNG est très différent du paramètre de qualité JPEG (qui est simplement un entier de 0 à 100).

Pour PNG, c'est composé - composé de deux chiffres simples:

  • Le premier chiffre ( {level}) est (en grande partie) le niveau de compression zlib , et il peut aller de 0 à 9.
    (Cependant, le réglage de 0 a une signification particulière: lorsque vous l'utilisez, vous obtiendrez la compression Huffman, pas le niveau de compression zlib 0. C'est souvent mieux ... Bizarre mais vrai.)

  • Le deuxième chiffre ({filter}) est le type de filtre de codage des données PNG (avant sa compression):

    • 0 signifie aucun,
    • 1 signifie "sous",
    • 2 signifie "haut",
    • 3 signifie "moyen",
    • 4 signifie "Paeth", et
    • 5 signifie "adaptatif".

Concrètement, cela se traduit par:

  • Pour les illustrations avec des séquences solides de compression Huffman couleur avec un filtre "aucun" (-quality 00) est généralement le plus approprié.
  • Pour les photos de paysages naturels, un filtrage "adaptatif" (-quality 05) est généralement le meilleur.

Pour traduire cela dans votre syntaxe de ligne de commande, essayez le paramètre suivant:

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

Enfin, si je veux vraiment comparer les différents niveaux de netteté (mais proches) d'une image après compression, j'utilise fréquemment le merveilleux de Fred Weinstein flicker_cmp script.

Laissez votre femme le tester ... :-)


P.S .: Ici est un bon guide sur les aspects techniques de la compression PNG.

32
Kurt Pfeifle

L'algorithme de compression de dégonflage utilise une fenêtre d'historique de 65 Ko. La compression PNG a tendance à être plutôt lente car le processus doit comparer les séquences d'octets du flux de compression avec celles de la fenêtre.

Vous pouvez contrôler la vitesse de la compression en limitant la recherche de fenêtre. Vous pouvez rechercher uniquement la moitié du tampon pour les correspondances afin d'accélérer le processus (comme le risque d'une compression plus faible).

En JPEG, le compromis est entre la qualité et la taille. Dans la compression PNG, le compromis est entre vitesse et taille.

Dans tous les cas, le processus de compression PNG est toujours sans perte.

6
user3344003

J'ai passé une demi-journée à jouer. J'ai redimensionné les images à 360x240px. J'ai obtenu le meilleur résultat avec:

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

La meilleure compression que j'ai obtenue était la suivante:

convert wallpsw.png -resize 1024x768 -quality 95 \
                    -depth 8 wallpsw-q95-r1024x768-d8.png

Les resultats:

identify wallpsw*

 wallpsw.png PNG 1920x1080 1920x1080+0+0 16-bit DirectClass 4.63MB 0.000u 0:00.000
 wallpsw-q95-r1024x768-d8.png[1] PNG 1024x576 1024x576+0+0 8-bit DirectClass 854KB 0.000u 0:00.000

Si quelqu'un connaît un meilleur moyen, dites-moi s'il vous plaît. Je ne pouvais pas trouver.

4
betomoretti