Re: image png couleur 8 bits ou 32 bits

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: image png couleur 8 bits ou 32 bits
Bonjour !

Le samedi 20 septembre, jeanluc a écrit :
> Je veux faire une image 16x16 pixels en couleur 8 bits et en couleur
> 32 bits. Je fais mon image avec inkscape, j'exporte en png, et puis je
> veux utiliser "convert" pour convertir en couleur 8 bits ou couleur 32
> bits.


Qu'est-ce que tu entends par « couleur 32 bits » ? Il y a une couche
alpha dans ton image ? Le format PNG supporte les variantes suivantes
pour les images en couleur :

couleurs indexées : 1 canal, avec 1, 2, 4 ou 8 bits par pixel ;
couleur RGB : 3 canaux, 8 ou 16 bits par canal (pour chaque pixel) ;
couleur RGBA : 4 canaux, 8 ou 16 bits par canal (pour chaque pixel).

Dans le premier cas, il y a une palette qui est forcément soit en RGB 8
bits, soit en RGBA 8 bits. Le A de RGBA est en fait un alpha majuscule,
c'est la couche de transparence (ou plutôt d'opacité...).

> Il y a peut-etre d'autre methode ....


Pour passer en couleurs indexées, j'utilise le plus souvent Gimp :

  - Image/Mode/Indexed... : je choisis là un nombre de couleurs adapté à
    l'image, en tenant compte du fait que l'antialiasing demande des
    couleurs supplémentaires. Si j'arrive à descendre à 16 couleurs avec
    un bon résultat je le fais : ça permet de coder seulement 4 bits par
    pixel.


  - Dialogs/Colormap : pour ajuster certaines couleurs. Par exemple, si
    l'image d'origine avait un fond blanc, la réduction du nombre de
    couleurs risque d'avoir légèrement modifié la couleurs de fond. Ça
    peut être gênant si la couleur de fond a été choisie à l'origine
    pour être identique à la couleur de ce qu'il y aura autour de
    l'image. Dans ce cas j'édite la couleur « presque blanc » pour lui
    redonner sa blancheur.


> Est-ce qu'une image png contient dejà l'info 8/32 bits dedans ?


Forcément ! Sinon il serait impossible de la décoder !!!

> Mais le problème, c'est que l'outil "identify" ne me sort pas l'info.
>     prompt> identify pic_16x16x32.png
>     pic_16x16x32.png PNG 16x16 16x16+0+0 DirectClass 884
>     prompt> identify pic_16x16x8.png
>     pic_16x16x8.png PNG 16x16 16x16+0+0 DirectClass 768


Ton identify n'est pas très bavard...

DirectClass ça veut dire que ce n'est *pas* des couleurs indexées. Si
les images sont bien en couleur, c'est donc soit du RGB (sans
transparence), soit du RGBA (avec transperence), avec 8 ou 16 bits par
canal. Ce qui fait en tout 24 à 64 bits par pixel. Dans le cas de
couleurs indexées, il afficherait « PseudoClass ».

Mon identify est plus explicite :
    01.png PNG 800x602 800x602+0+0 DirectClass 16-bit 172.34kb
    02.png PNG 800x602 800x602+0+0 DirectClass 8-bit 116.182kb
    03.png PNG 800x602 800x602+0+0 PseudoClass 256c 8-bit 53.9961kb
(il s'agit de ImageMagick 6.3.2 05/08/08 Q16). Le premier fichier
ci-dessus c'est du RGB 16 bits, soit 48 bits par pixel. Le deuxième
c'est du RGB 8 bits (24 bits/px). Le troisième c'est des couleurs
indexées, avec 8 bits par pixel et une palette de 256 couleurs.


Si ton identify n'est pas très clair, tu peux connaître de façon
certaine le type d'une image PNG en regardant les octets 24 et 25 du
fichier (en comptant à partir de zéro) :

    $ od -j 24 -w2 -A d -t d1 toto.png | head -1
    0000024    8    2


Le premier de ces octets (qui vaut 8 dans l'exemple ci-dessus) t'indique
la profondeur de l'image. Ici 8 bits. Attention, la profondeur s'entend
toujours *par canal*. Le deuxième octet est le type d'image : il
signifie :

    0 : niveaux de gris
    2 : couleur RGB
    3 : couleurs indexées
    4 : niveaux de gris avec transparence
    6 : couleur RGBA (c.-à-d. RGB avec transparence)


Donc dans mon exemple c'est du RGB 8 bits. Encore une fois, c'est 8 bits
par canal. Comme il y a trois canaux (R, G et B) ça fait 24 bits par
pixel.

> Et puis après, il faudra que je trouve l'option pour convert ....
> probablement parmi celles-ci :
>     convert --help
>             -colors value        preferred number of colors in the image
>             -depth value         image depth
>             -treedepth value     color tree depth


-depth 8 :    pour avoir 8 bits par canal ;
-colors 256 : pour passer en couleurs indexées, avec une palette de
              256 couleurs.


Ciao,

Edgar.