web-dev-qa-db-fra.com

Comment savoir si un fichier PNG est PNG-8 ou PNG-24?

J'ai un fichier PNG mais je ne peux pas dire s'il s'agit de PNG-8 ou de PNG-24?

13
ExillustX

La commande file utilisée dans d'autres réponses est parfois incohérente. Par exemple:

───────────────────────────────────────────────────────────────────────────────
rick@Dell:~/Pictures$ file "256 colors.jpg"
256 colors.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, baseline, precision 8, 800x800, frames 3
───────────────────────────────────────────────────────────────────────────────
rick@Dell:~/Pictures$ file "vnStat.png"
vnStat.png: PNG image data, 410 x 121, 8-bit/color RGB, non-interlaced

La première instance est probablement une photo et la seconde prise avec une capture d’écran.

La commande identify, sur laquelle ma réponse est basée, semble fonctionner correctement dans toutes les instances. Par exemple, tester sur la première instance ci-dessus:

rick@Dell:~/Pictures$ identify "256 colors.jpg"
256 colors.jpg JPEG 800x800 800x800+0+0 8-bit sRGB 45KB 0.000u 0:00.000

J'ai ImageMagick installé, ce qui me permet d'utiliser:

$ identify -verbose vnStat.png
Image: vnStat.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 410x121+0+0
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Pixels: 49610
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 12.0814 (0.0473779)
      standard deviation: 46.7032 (0.18315)
      kurtosis: 18.8998
      skewness: 4.49862
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 21.1804 (0.0830606)
      standard deviation: 57.5336 (0.225622)
      kurtosis: 6.68226
      skewness: 2.82613
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 14.2606 (0.0559237)
      standard deviation: 50.2969 (0.197243)
      kurtosis: 13.5573
      skewness: 3.85914
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 15.8408 (0.0621207)
      standard deviation: 51.7078 (0.202776)
      kurtosis: 11.8528
      skewness: 3.62638
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: white
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 410x121+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2017-01-24T20:04:50-07:00
    date:modify: 2017-01-24T20:04:50-07:00
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 2
    png:IHDR.color_type: 2 (Truecolor)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 410, 121
    png:sRGB: intent=0 (Perceptual Intent)
    png:text: 1 tEXt/zTXt/iTXt chunks were found
    signature: e9f31b79da6ce46cdea5da21ae8648496faa181b0621098aa2dbbdff4a9a4502
    Software: gnome-screenshot
  Artifacts:
    filename: vnStat.png
    verbose: true
  Tainted: False
  Filesize: 14.7KB
  Number pixels: 49.6K
  Pixels per second: 0B
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.8.9-9 Q16 x86_64 2017-07-31 http://www.imagemagick.org

Pour un rapport de synthèse, omettez tous les paramètres:

$ identify vnStat.png
vnStat.png PNG 410x121 410x121+0+0 8-bit sRGB 14.7KB 0.000u 0:00.000

Remplacez vnStat.png par votre propre nom de fichier .png et faites-le précéder du chemin si nécessaire.


Pour comprendre PNG-24 vs PNG-32, cette réponse de SuperUser la résume:

Si votre image est en 24 bits, vous verrez:

Channel depth:
  red: 8-bit
  green: 8-bit
  blue: 8-bit

Si votre image PNG est en 32 bits, vous verrez:

Channel depth:
  red: 8-bit
  green: 8-bit
  blue: 8-bit
  alpha: 8-bit

Toutefois, cette réponse n’est pas complète car la couleur 8 bits indique également 8 bits pour le rouge, le vert et le bleu, seule une palette de couleurs est utilisée pour limiter le nombre de sélections (comme dans le bon vieux Windows 2.0).


Examinez ces trois images de article de Wikipedia :

8_bit.png

Nom du fichier: 8_bit.png

En utilisant:

identify -verbose  8_bit.png | grep colors
    png:PLTE.number_colors: 249

Nous voyons qu'il y a 249 couleurs utilisées. Le maximum possible avec 8 bits est de 256 couleurs.


4 bit

Nom du fichier: 4_bit.png

En utilisant:

identify -verbose  4_bit.png | grep colors
    png:PLTE.number_colors: 16

Nous voyons que 16 couleurs sont utilisées, ce qui correspond au maximum de combinaisons de couleurs possibles avec 4 bits.


2_bit.png

Nom du fichier: 2_bit.png

En utilisant:

$ identify -verbose  2_bit.png | grep colors
    png:PLTE.number_colors: 4

Nous voyons que 4 couleurs sont utilisées, ce qui correspond au maximum de combinaisons de couleurs possibles avec 2 bits.

24
WinEunuuchs2Unix

PNG 32 bits (8 bits par canal - w/alpha, également appelé "PNG 24 bits avec 8 bits alpha" ou "PNG24 avec alpha"):

$ file zyne_zyne.png: 
PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced

PNG 24 bits (8 bits par canal - pas de canal alpha)

$ file 24.png
PNG image data, 1060 x 821, 8-bit/color RGB, non-interlaced

PNG 8 bits (256 couleurs):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
28
Rinzwind

Si vous avez installé exiftool, vous pouvez faire:

 bash-4.3 # exiftool continents_blank_l.png 
 Numéro de version d’ExifTool: 10.20 
 Nom du fichier: continents_blank_l.png 
 Répertoire:. 
 Taille du fichier: 170 kB 
 Date/heure de modification du fichier: 2016: 07: 05 07: 59: 28 + 05: 30 
 Date/heure d'accès au fichier: 2017: 08: 07 00: 35: 15 + 05 : 30 
 Date/heure de changement de fichier: 2016: 07: 05 07: 59: 28 + 05: 30 
 Autorisations de fichiers: rw-r - r - 
 Fichier Type: PNG 
 Extension du type de fichier: png 
 Type MIME: image/png 
 Largeur de l'image: 1100 
 Hauteur de l'image: 850 
Profondeur de bits: 8
 Couleur Type: RVB avec Alpha 
 Compression: Dégonfler/Gonfler 
 Filtre: Adaptatif 
 Entrelacé: 
 Couleur de fond: 255 255 255 
 Pixels par unité X: 3937 
 Pixels par unité Y: 3937 
 Unités de pixels: mètres 
 Date de modification: 2016: 07: 05 02:29:28 
 Taille de l'image: 1100x850 
 Mégapixels: 0,935 
8
Firelord

Le chemin du pirate informatique: jetez un coup d'œil dans les vrais octets à l'intérieur du bloc IHDR PNG .

 $ od -j 24 -N 2 -t u1 -An drivemount-applet_open.png
   8   2

Le premier numéro vous indique la profondeur en bits. La seconde, le type de couleur (2 correspond aux images RVB, c'est-à-dire aux images comportant trois canaux ou trois valeurs d'échantillonnage par pixel).

Par conséquent, dans ce cas, nous avons un PNG RGB8 (24 bits par pixel).

5
leonbloy

En guise d'alternative à l'utilisation ci-dessus de "fichier" qui repose sur la magie du fichier dans l'en-tête du fichier PNG, si vous travaillez avec des fichiers PNG, il est utile d'installer le paquetage "pngtools".

pnginfo peut ensuite être utilisé pour donner des détails complets sur les propriétés du fichier PNG, y compris BitDepth (Bits/Sample) (à ne pas confondre avec une autre propriété, Pixel Depth).

 file  Debian_Expo.png

 Debian_Expo.png: PNG image data, 1280 x 1024, 8-bit/color RGB, non-interlaced

 ---

 pnginfo Debian_Expo.png

 Image Width: 1280 Image Length: 1024
 Bitdepth (Bits/Sample): 8
 Channels (Samples/Pixel): 3
 Pixel depth (Pixel Depth): 24
 Colour Type (Photometric Interpretation): RGB 
 ...

L'équivalent pour les fichiers JPEG est jpeginfo, dans son propre package jpeginfo.

Le format de la sortie de pnginfo facilite l'extraction de la valeur de BitDepth (car elle se trouve sur une ligne séparée) si elle est utilisée dans un script Shell.

Si le fichier n'est pas réellement un fichier PNG, car p.ex. il s'agit d'un JPEG mal nommé, pnginfo signalera alors "Ce fichier n'est pas un fichier PNG valide".

Comme toujours, l'outil approprié pour le travail dépend, entre autres choses, de la fréquence à laquelle vous allez utiliser l'outil et de la manière dont vous souhaitez traiter la sortie.

3
J G Miller