Question Convertir l'image en PNG non compressé à partir de la ligne de commande


J'ai une image PNG compressée compressed.png. Je peux le convertir en PNG non compressé decompressed.png en utilisant GIMP (sauvegarde au format PNG et réglage du niveau de compression sur 0). Comment cela peut-il être fait sur la ligne de commande (Linux)?

Je me souviens de l'avoir fait dans le passé en utilisant Imagemagick's convert, mais j'ai oublié comment. J'ai essayé certaines choses que je pensais devrait fonctionner sur la base de La documentation:

  • convert compressed.png -compress None decompressed.png
  • convert compressed.png +compress decompressed.png
  • convert compressed.png -quality 0 decompressed.png
  • convert compressed.png -quality 00 decompressed.png

Je viens juste d'écrire un fichier PNG compressé ordinaire.

À part: pourquoi voudriez-vous un PNG non compressé?

Certains cas:

  • Vous souhaitez prendre en charge des différences (binaires) efficaces des données d'image, tout en utilisant d'autres fonctionnalités du format PNG (par opposition au stockage de données d'image brutes ou BMP).
  • Vous souhaitez compresser plusieurs fichiers PNG dans une archive tar ou 7z, mais vous souhaitez continuer à utiliser les fonctionnalités PNG. Si les images sont suffisamment similaires, cela peut donner un meilleur taux de compression que la compression individuelle.
  • Utile comme taille de base pour tester les optimiseurs PNG.

4
2017-07-27 21:49


origine


Qu'es-tu vraiment essayer de faire? Je ne peux penser à aucune raison dans la pratique de vouloir un plus grand Fichier PNG. - Michael Hampton
@MichaelHampton Édité avec des exemples - Mechanical snail
J'utilise ceci pour ajouter un énorme fichier png à la suite de tests de mon application pour valider les restrictions de téléchargement. Cependant, ce fichier est facilement compressé (26 Mo -> 300 Ko) et ne fait pas exploser tout le dépôt. - Pascal


Réponses:


ImageMagick compresse toujours les fichiers PNG. La pire compression que vous pouvez obtenir est d'utiliser:

convert -verbose -quality 01 input.png output.png

mais cela dépend du contenu de l'image (le 0 utilisera la compression Huffman qui compresse parfois mieux que zlib).

Vous pouvez essayer d'autres outils comme pngcrush (http://pmt.sourceforge.net/pngcrush/) pour désactiver la compression:

pngcrush -force -m 1 -l 0 input.png output.png

qui créent un fichier de la même taille que GIMP lorsqu’il utilise le niveau de compression 0 (quelques octets plus ou moins).

Quelques exemples de tailles (pour un PNG photographique, 1600x1200):

  • original: 1 693 848 octets.
  • après IM: 2 435 983 octets.
  • après GIMP: 5 770 587 octets.
  • après pngcrush: 5 802 254 octets.

3
2017-08-02 09:29





Pour citer le document ImageMagick: Toutes les combinaisons de niveau de compression, de stratégie et de type de filtre PNG ne peuvent pas être obtenues à l'aide de l'option -quality. Pour un contrôle plus précis, vous pouvez utiliser l'option -define.

Par exemple, cette commande doit créer un fichier PNG non compressé (RVB):

convert INFILE \
-define png:compression-level=0 \
-define png:compression-filter=0 \
-define png:color-type=2 \
OUTFILE.png

Vous pourriez recevoir un avertissement, qui est un bug inoffensif. Il produira toujours un png correct. http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20257

Image de l'échantillon:

112233 112233 112233 112233
445566 445566 445566 445566
778899 778899 778899 778899
aabbcc aabbcc aabbcc aabbcc

Bloc IDAT du fichier PNG créé avec IM:

49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...

Cependant, dans certains cas (par exemple, la compression de groupe), il peut être utile de tester un format avec moins de surcharge, par exemple TARGA (.tga).


5
2017-09-16 12:15



N'a pas semblé fonctionner pour moi (ImageMagick 6.6.9-7 sous Linux) - la sortie est toujours compressée. - Mechanical snail
Je l'ai testé avec ImageMagick 6.7.2-7. Il semble que cette clé ait été ajoutée récemment, vous devrez donc utiliser une version plus récente de la messagerie instantanée. - Meyer
imagemagick.org/script/command-line-options.php dit "png:compression-level=value: les valeurs valides sont comprises entre 0 et 9, 0 fournissant la compression la plus faible mais la plus rapide et 9 fournissant généralement la meilleure et la plus lente. ". - Mechanical snail
Désolé, je pense que j'ai mal compris votre premier commentaire. En regardant les bits réels, vous avez raison, l'image n'était toujours pas un bitmap propre. Ce qui est important, c'était également le cas avec la version générée par GIMP. Cependant, expérimenter plus avant l’option de définition de la messagerie instantanée indique qu’elle est toujours possible. J'ai édité la réponse en conséquence. - Meyer


J'aime la suite d'outils netpbm, conçue dans la tradition des "outils logiciels" d'UNIX: "écrire des programmes qui font une chose et le font bien".

Vous pouvez faire ce que vous avez demandé comme ceci:

< in.png pngtopnm > image.pnm
< in.png pngtopnm -alpha > alpha.pnm
<image.pnm pnmtopng -alpha alpha.pnm -compression 0 > out.png
rm image.pnm alpha.pnm

Vous risquez de perdre certaines métadonnées du fichier png d'origine.

Cela semble un peu compliqué en raison de la façon dont nous traitons le canal alpha.

Netpbm est une boîte à outils pour la manipulation d'images graphiques, y compris la conversion d'images entre différents formats. Il existe plus de 220 outils distincts dans le package, y compris des convertisseurs pour plus de 80 formats graphiques.


1
2017-08-06 07:30