Wie finde ich heraus, ob ein PNG PNG-8 oder PNG-24 ist?

15

Ich habe eine PNG-Datei, kann aber nicht feststellen, ob es sich um PNG-8 oder PNG-24 handelt.

ExillustX
quelle

Antworten:

25

Die fileVerwendung von Befehlen in anderen Antworten ist manchmal inkonsistent. Beispielsweise:

───────────────────────────────────────────────────────────────────────────────
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

Die erste Instanz ist wahrscheinlich ein Kamerabild und die zweite Instanz habe ich mit einem Screenshot aufgenommen.

Der identifyBefehl, auf dem meine Antwort basiert, scheint in allen Fällen korrekt zu funktionieren. Zum Beispiel Testen in der ersten Instanz oben:

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

Ich habe ImageMagick installiert, mit dem ich Folgendes verwenden kann:

$ 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

Für einen zusammenfassenden Bericht lassen Sie alle Parameter weg:

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

Ersetzen Sie diese vnStat.pngdurch Ihren eigenen .pngDateinamen und geben Sie gegebenenfalls den Pfad ein.


Um PNG-24 und PNG-32 zu verstehen, fasst diese Antwort von SuperUser Folgendes zusammen:

Wenn Ihr Bild 24 Bit ist, werden Sie sehen:

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

Wenn Ihr PNG-Bild 32-Bit ist, werden Sie sehen:

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

Diese Antwort ist jedoch nicht vollständig, da 8-Bit-Farben auch 8-Bit-Farben für Rot, Grün und Blau enthalten. Es wird nur eine Farbpalette verwendet, um die Anzahl der Auswahlen zu begrenzen (wie in guten alten Windows 2.0-Versionen).


Untersuchen Sie diese drei Bilder aus Wikipedia Tiefe Artikel :

8_bit.png

Dateiname: 8_bit.png

Verwenden von:

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

Wir sehen, dass 249 Farben verwendet werden. Mit 8 Bit sind maximal 256 Farben möglich.


4 bit

Dateiname: 4_bit.png

Verwenden von:

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

Wir sehen, dass 16 Farben verwendet werden. Dies ist die maximale Farbkombination, die mit 4 Bits möglich ist.


2_bit.png

Dateiname: 2_bit.png

Verwenden von:

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

Wir sehen, dass 4 Farben verwendet werden. Dies ist die maximale Farbkombination, die mit 2 Bits möglich ist.

WinEunuuchs2Unix
quelle
2
Für ein skriptfreundlicheres Format können Sie dies auch tun . Weitere Informationen finden Sie identify -format %zunter ImageMagick-Formatoptionen .
flauschige
29

32-Bit-PNG (8 Bit pro Kanal - mit Alpha, auch als "24-Bit-PNG mit 8-Bit-Alpha" oder "PNG24 mit Alpha" bezeichnet):

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

24-Bit-PNG (8 Bit pro Kanal - kein Alphakanal)

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

8-Bit-PNG (256 Farben):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
Rinzwind
quelle
Und das Abzeichen gehört mir :-)
Rinzwind
1
Paletten-PNGs haben immer noch 8 Bit pro RGBA-Komponente, sie sind nur auf 256 Paletteneinträge beschränkt. (Jedes Pixel ist ein 8-Bit- oder kleinerer Index in der Palette, anstatt Pixeldaten buchstäblich zu speichern). Es ist nicht ganz klar, was das ist. PNG24 ist auch 8 Bits pro Komponente (nicht 24 Bits pro Komponente). Das wäre also eine bessere Antwort, wenn Sie die Ausgabe von beiden PNG-Arten zeigen würden.
Peter Cordes
Ich habe vor 8 Stunden falsch verstanden, was Sie mit "Abzeichen" gemeint haben, aber jetzt bin ich mit Bronze und Silber aufgewacht :)
WinEunuuchs2Unix
Das erste bis
zehnte
1
@evilSnobu> fileist mein primäres Tool zur Identifizierung von Dateien und ich bin immer wieder erstaunt, wie viel es selbst über exotische Dateiformate aussagt. Zugegeben, seine Implementierung ist seit den 80ern ziemlich
gewachsen
8

Wenn Sie exiftool installiert haben, können Sie Folgendes tun:

bash-4.3 # exiftool continents_blank_l.png 
ExifTool-Versionsnummer: 10.20
Dateiname: continents_blank_l.png
Verzeichnis : .
Dateigröße: 170 kB
Änderungsdatum / -zeit der Datei: 2016: 07: 05 07: 59: 28 + 05: 30
Datum / Uhrzeit des Dateizugriffs: 2017: 08: 07 00: 35: 15 + 05: 30
Dateieingabe Änderungsdatum / -zeit: 2016: 07: 05 07: 59: 28 + 05: 30
Dateiberechtigungen: rw-r - r--
Dateityp: PNG
Dateierweiterung: png
MIME-Typ: image / png
Bildbreite: 1100
Bildhöhe: 850
Bittiefe: 8
Farbtyp: RGB mit Alpha
Kompression: Luft ablassen / aufblasen
Filter: Adaptiv
Interlace: Nicht interlaced
Hintergrundfarbe: 255 255 255
Pixel pro Einheit X: 3937
Pixel pro Einheit Y: 3937
Pixeleinheiten: Meter
Änderungsdatum: 2016: 07: 05 02:29:28
Bildgröße: 1100 x 850
Megapixel: 0,935
Feuerlord
quelle
5

Der Weg des Hackers: Werfen Sie einen Blick in die echten Bytes im PNG-Block des IHDR .

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

Die erste Zahl gibt die Bittiefe an. Der zweite ist der Farbtyp (2 für RGB-Bilder, dh Bilder mit drei Kanälen oder drei Abtastwerten pro Pixel).

In diesem Fall haben wir also ein RGB8 PNG (24 Bit pro Pixel).

Leonbloy
quelle
Ist das nicht PNG24 (8-Bit pro Kanal)? PNG8 ist 8-Bit-Colormap = 256 Farben.
EvilSnobu
1
Ja, RGB8 entspricht PNG24.
Leonbloy
Richtig. Mein Fehler. Ich lese das als PNG8 nicht RGB8. Ihre Antwort ist völlig richtig.
evilSnobu
3

Wenn Sie mit PNG-Dateien arbeiten, ist es hilfreich, das Paket " pngtools " installiert zu haben.

pnginfo kann dann verwendet werden, um alle Details der Eigenschaften der PNG-Datei anzugeben, einschließlich der BitDepth (Bits / Sample) (die nicht mit einer anderen Eigenschaft, Pixel Depth, verwechselt werden dürfen).

 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 
 ...

Das Äquivalent für JPEG-Dateien ist jpeginfo in seinem eigenen Paket jpeginfo.

Das Format der Ausgabe von pnginfo erleichtert das Extrahieren des Werts von BitDepth (wie in einer separaten Zeile), wenn es in einem Shell-Skript verwendet wird.

Sollte es sich bei der Datei nicht um eine PNG-Datei handeln, da es sich beispielsweise um eine falsch benannte JPEG-Datei handelt, meldet pnginfo "Diese Datei ist keine gültige PNG-Datei".

Wie immer wird das geeignete Tool für den Job unter anderem dadurch bestimmt, wie oft Sie das Tool verwenden und wie Sie die Ausgabe verarbeiten möchten.

JG Miller
quelle