Jak sprawdzić, czy PNG to PNG-8 czy PNG-24?

Odpowiedzi:

25

fileUżycie polecenia w innych odpowiedzi jest czasami niespójne. Na przykład:

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

Pierwsze wystąpienie to prawdopodobnie zdjęcie z kamery, a drugie wystąpienie zrobiłem za pomocą zrzutu ekranu.

identifyKomenda, która opiera się na moją odpowiedź, wydaje się działać poprawnie we wszystkich przypadkach. Na przykład testowanie w pierwszej instancji powyżej:

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

Mam zainstalowany ImageMagick, który pozwala mi używać:

$ 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

W raporcie podsumowującym pomiń wszystkie parametry:

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

Zamień vnStat.pngna własną .pngnazwę pliku i, jeśli to konieczne, wprowadź ścieżkę.


Aby zrozumieć PNG-24 kontra PNG-32, odpowiedź SuperUser podsumowuje:

Jeśli obraz ma 24 bity, zobaczysz:

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

Jeśli twój obraz PNG jest 32-bitowy, zobaczysz:

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

Jednak ta odpowiedź nie jest kompletna, ponieważ 8-bitowy kolor pokazuje również 8 bitów dla czerwonego, zielonego i niebieskiego, tylko paleta kolorów jest używana do ograniczenia liczby wyborów (jak w starym dobrym Windows 2.0).


Przejrzyj te trzy zdjęcia z artykułu o Wikipedii :

8_bit.png

Nazwa pliku: 8_bit.png

Za pomocą:

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

Widzimy, że użyto 249 kolorów. Maksymalnie możliwe przy 8 bitach jest 256 kolorów.


4 bity

Nazwa pliku: 4_bit.png

Za pomocą:

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

Widzimy, że użyto 16 kolorów, co jest maksymalną możliwą kombinacją kolorów z 4 bitami.


2_bit.png

Nazwa pliku: 2_bit.png

Za pomocą:

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

Widzimy, że zastosowano 4 kolory, co jest maksymalną możliwą kombinacją kolorów z 2 bitami.

WinEunuuchs2Unix
źródło
2
Aby uzyskać format bardziej przyjazny skryptom, możesz także zrobić identify -format %z- zobacz Opcje formatowania ImageMagick, aby uzyskać więcej.
puszysty
29

32-bitowy PNG (8 bitów na kanał - w / alfa, zwany także „24-bitowym PNG z 8 bitami alfa” lub „PNG24 z alfa”):

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

24-bitowy PNG (8 bitów na kanał - bez kanału alfa)

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

8-bitowy PNG (256 kolorów):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
Rinzwind
źródło
A odznaka jest moja :-)
Rinzwind,
1
Palety PNG nadal mają 8 bitów na komponent RGBA, są one po prostu ograniczone do 256 pozycji palety. (Każdy piksel jest 8-bitowym lub mniejszym indeksem w palecie, zamiast dosłownie przechowywać dane pikseli). Nie jest do końca jasne, co to jest. PNG24 ma również 8 bitów na komponent (nie 24 bity na komponent). To byłaby lepsza odpowiedź, gdybyś pokazał dane wyjściowe z obu rodzajów PNG.
Peter Cordes,
Nie rozumiem, co rozumiesz przez „odznakę” 8 godzin temu, ale teraz rozumiem, bo obudziłem się z brązem i srebrem :)
WinEunuuchs2Unix
Odznaka od 1 do 10 zawsze wygrywa tylko od 1 do 100 ;-)
Rinzwind
1
@evilSnobu> fileto moje podstawowe narzędzie do identyfikacji plików i zawsze jestem zaskoczony, jak wiele może powiedzieć nawet o egzotycznych formatach plików. To prawda, że ​​jego implementacja znacznie wzrosła od lat 80. :)
spectras
8

Jeśli masz zainstalowany exiftool , możesz:

bash-4.3 # exiftool continents_blank_l.png 
Numer wersji ExifTool: 10.20
Nazwa pliku: continents_blank_l.png
Katalog:.
Rozmiar pliku: 170 kB
Data / godzina modyfikacji pliku: 2016: 07: 05 07: 59: 28 + 05: 30
Data / czas dostępu do pliku: 2017: 08: 07 00: 35: 15 + 05: 30
Data i godzina zmiany i-węzła pliku: 2016: 07: 05 07: 59: 28 + 05: 30
Uprawnienia do plików: rw-r - r--
Typ pliku: PNG
Rozszerzenie typu pliku: png
Typ MIME: image / png
Szerokość obrazu: 1100
Wysokość obrazu: 850
Głębia bitowa: 8
Kolor: RGB z Alpha
Kompresja: Deflate / Inflate
Filtr: adaptacyjny
Przeplot: Bez przeplotu
Kolor tła: 255 255 255
Pikseli na jednostkę X: 3937
Pikseli na jednostkę Y: 3937
Jednostki pikseli: metry
Zmień datę: 2016: 07: 05 02:29:28
Rozmiar obrazu: 1100 x 850
Megapiksele: 0,935
Pan ognia
źródło
5

Sposób hakera: zajrzyj do prawdziwych bajtów w kawałku IHDR PNG .

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

Pierwsza liczba mówi bitdepth. Drugi rodzaj koloru (2 dotyczy obrazów RGB, to znaczy obrazów z trzema kanałami lub trzema próbkami na piksel).

Dlatego w tym przypadku mamy RGB8 PNG (24 bity na piksel).

leonbloy
źródło
Czy to nie PNG24 (8 bitów na kanał)? PNG8 to 8-bitowa mapa kolorów = 256 kolorów.
evilSnobu
1
Tak, RGB8 odpowiada PNG24.
leonbloy,
Dobrze. Mój błąd. Czytam to jako PNG8, a nie RGB8. Twoja odpowiedź jest całkowicie poprawna.
evilSnobu,
3

Alternatywą dla powyższego użycia „pliku”, który opiera się na magii pliku w nagłówku pliku PNG, jeśli pracujesz z plikami PNG, warto mieć zainstalowany pakiet „ pngtools ”.

pnginfo może być następnie użyty do podania pełnych szczegółów właściwości pliku PNG, w tym BitDepth (Bits / Sample) (którego nie należy mylić z inną właściwością, 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 
 ...

Odpowiednikiem plików JPEG jest jpeginfo we własnym pakiecie jpeginfo.

Format danych wyjściowych pnginfo ułatwia wyodrębnienie wartości BitDepth (ponieważ znajduje się ona w osobnym wierszu), jeśli jest używana w skrypcie powłoki.

Jeśli plik nie jest w rzeczywistości plikiem PNG, ponieważ np. Jest to JPEG o niepoprawnej nazwie, pnginfo zgłosi „Ten plik nie jest prawidłowym plikiem PNG”.

Jak zawsze odpowiednie narzędzie do pracy zależy między innymi od tego, jak często będziesz używać tego narzędzia i jak chcesz przetwarzać dane wyjściowe.

JG Miller
źródło