J'ai un fichier PNG mais je ne peux pas dire s'il s'agit de PNG-8 ou de PNG-24?
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 :
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.
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.
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.
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
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
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).
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.