Bonjour,
Je tente de convertir une image bmp en png, afin d'obtenir un fichier le plus petit possible, mais dans un format sans pertes.
Mon image d'origine est en RGB, 24 bits par pixels, mais elle est en niveaux de gris (les valeurs de chacun des canaux sont identiques). Elle fait 320x240 pixels.
J'ai généré un premier png avec la commande:
convert original.bmp out.png
En regardant plus attentivement avec GIMP, j'ai vu que l'image de sortie était toujours en RGB, et pas en niveaux de gris. Après de longues (!) recherches sur les options de convert, j'ai trouvé la commande suivante:
convert original.bmp -type Grayscale out.png
Le png généré n'a plus qu'un seul canal en niveaux de gris, et ne pèse plus que 48 Ko, contre 64 Ko précédemment. J'ai néanmoins vu l'option -type Palette qui doit à priori utiliser des couleurs indexées. Et là, je descends à 20 Ko, nickel pour pour ce que je veux faire !
Sauf que... ça ne marche pas. En fait l'image est différente de l'original avec cette option, mais je ne sais pas pourquoi... Y a t'il un gourou qui pourrait m'expliquer comment avoir un fichier PNG le plus petit possible et identique à l'original ? Pourquoi j'ai une image différente en couleurs indexées ?
Merci.
# Chemins retords...
Posté par liberforce (site web personnel) . Évalué à 2.
J'ai donc l'impression que l'option Palette a dû essayer de transformer mon espace de couleurs RGB en palette indexée, sans passer par des niveaux de gris au milieu, ce qui a causé des pertes. Ces pertes ont eu pour effet de bord que le fichier se compresse mieux.
Mais impossible de descendre sous cette limite, sauf en utilisant l'outil pngcrush, qui peut faire descendre l'image à 40 Ko, mais c'est tout. J'avais testé convert avec l'option -quality 90, mais ça n'a pas changé grand chose... D'autres idées pour réduire la taille ?
[^] # Palette
Posté par Kerro . Évalué à 2.
Je crois que tu obtiens la même chose avec "-colorspace Gray". A tester.
Les options "-separate -channel Red" permettent aussi d'obtenir le même résultat en étant certain qu'il n'y a pas de modification (car de mémoire, GrayScale effectue une correction et pas simplement une moyenne. A vérifier).
Et pour finir: "-compress bzip" si le contenu de ton image le permet.
[^] # Re: Palette
Posté par liberforce (site web personnel) . Évalué à 3.
De plus Grayscale ne fait pas de correction, l'image est identique à celle de départ, chose confirmée par compare -metric AE original.bmp convert.png difference.png (et aussi par un petit soft de comparaison d'images que j'ai fait).
Pour la séparation de canaux, j'avais essayé, mais pas de différence avec Grayscale, ni en poids de l'image ni en taille.
L'option -compress n'a rien donné quelque soit la valeur utilisée, et -quality 100 me donne la même taille qu'initialement. Par conséquent, j'en déduis que j'ai un peu tout essayé. Tes indications m'ont montré que j'étais sur le bon chemin, merci :-)
[^] # Re: Palette
Posté par Olivier Jeannet . Évalué à 2.
Pour l'histoire de la palette, il est possible qu'une fois la conversion en niveaux de gris effectuée, si le nombre de nuances de gris présentes dans l'image est nettement inférieur à 256 (au pif genre 32), l'utilisation d'une palette permette de gagner un peu.
C'est clair que le BMP est à éviter, en plus ce n'est pas un standard du Web.
[^] # Re: Palette
Posté par liberforce (site web personnel) . Évalué à 2.
L'ancien logiciel utilisait du jpeg, mais je préférais ne pas avoir de pertes. Le png met trop de temps à être généré (j'ai 125 images en 320x240 par secondes à enregistrer), donc j'ai choisi un format non compressé, pour faire la compression à postériori, sans risquer de diminuer les performances de la machine pendant l'acquisition. Bon, en fait ça n'a pas résolu le problème, car maintenant j'ai des problèmes de bande passante en écriture avec le disque dur (forcément, je stocke 24 bits par pixels alors que 8 suffiraient, et j'ai un disque 4200 tours/minute).
Le choix du bmp est aussi dû au fait que c'est le seul format non compressé que je peux enregistrer avec gdk-pixbuf dans GTK+. Le format pgm (sans compression, un seul canal en niveaux de gris) est lu, mais pas écrit :-( . Je vais d'ailleurs tenter de faire un patch pour ça, ça me servira au boulot, et ça pourrait être utile à d'autres...
http://bugzilla.gnome.org/show_bug.cgi?id=333278
[^] # Re: Palette
Posté par Olivier Jeannet . Évalué à 2.
Pour le format PGM il est super simple, un programme de 10 lignes peut le gérer.
[^] # Bande passante disque
Posté par Kerro . Évalué à 2.
[^] # Re: Bande passante disque
Posté par liberforce (site web personnel) . Évalué à 2.
Quand t'as un mec qui remplit une cuve avec un tuyau d'arrosage à pleine pression, et un autre qui essaie de la vider avec un verre, au bout d'un moment la cuve déborde...
[^] # Re: Bande passante disque
Posté par Kerro . Évalué à 2.
Désolé ne n'avoir pu t'aider.
[^] # Re: Bande passante disque
Posté par Olivier Jeannet . Évalué à 2.
[^] # Re: Bande passante disque
Posté par Kerro . Évalué à 2.
Et la taille de mémoire occupée par le cache, autant l'utiliser pour un disque en mémoire. Tu es 100% certain que ça n'utilisera pas le disque. Ah... sauf en cas de swap. Je crois me souvenir d'une option quelque part à ce propos, pas sûr.
Je travaille sans swap depuis pas mal de temps, je ne sais plus comment faire pour éviter de jouer avec.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.