¿Cómo puedo saber si un PNG es PNG-8 o PNG-24?

Respuestas:

25

El fileuso del comando en otras respuestas es a veces inconsistente. Por ejemplo:

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

Es probable que la primera instancia sea una imagen de cámara y la segunda instancia que tomé usando una captura de pantalla.

El identifycomando, en el que se basa mi respuesta, parece funcionar correctamente en todos los casos. Por ejemplo, probando en la primera instancia anterior:

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

Tengo instalado ImageMagick que me permite usar:

$ 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

Para un informe resumido, omita todos los parámetros:

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

Reemplácelo vnStat.pngcon su propio .pngnombre de archivo y prefacio con la ruta si es necesario.


Para comprender PNG-24 vs PNG-32, esta respuesta de SuperUser lo resume:

Si su imagen es de 24 bits, verá:

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

Si su imagen PNG es de 32 bits, verá:

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

Sin embargo, esta respuesta no está completa porque el color de 8 bits también muestra 8 bits para Rojo, Verde y Azul, solo se usa una paleta de colores para limitar el número de selecciones (como en el viejo Windows 2.0).


Examine estas tres imágenes del artículo de profundidad de Wikipedia :

8_bit.png

Nombre del archivo: 8_bit.png

Utilizando:

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

Vemos que hay 249 colores usados. El máximo posible con 8 bits es de 256 colores.


4 bit

Nombre del archivo: 4_bit.png

Utilizando:

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

Vemos que se usan 16 colores, que es la combinación de colores máxima posible con 4 bits.


2_bit.png

Nombre del archivo: 2_bit.png

Utilizando:

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

Vemos que se usan 4 colores, que es la combinación de colores máxima posible con 2 bits.

WinEunuuchs2Unix
fuente
2
Para obtener un formato más amigable con los scripts, también puede hacerlo identify -format %z: consulte las opciones de formato de ImageMagick para obtener más información.
esponjoso
29

PNG de 32 bits (8 bits por canal - w / alfa, también llamado "PNG de 24 bits con 8 bits de alfa" o "PNG24 con alfa"):

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

PNG de 24 bits (8 bits por canal, sin canal alfa)

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

PNG de 8 bits (256 colores):

$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
Rinzwind
fuente
Y la insignia es mía :-)
Rinzwind
1
Los PNG de paleta todavía tienen 8 bits por componente RGBA, solo están limitados a 256 entradas de paleta. (Cada píxel es un índice de 8 bits o más pequeño en la paleta, en lugar de almacenar datos de píxeles literalmente). No está del todo claro qué es esto. PNG24 también tiene 8 bits por componente (no 24 bits por componente). Entonces, esta sería una mejor respuesta si mostrara resultados de ambos tipos de PNG.
Peter Cordes
No
entendí lo que querías
La insignia del 1 al 10 siempre es el ganador solo superado por el 1 al 100 ;-)
Rinzwind
1
@evilSnobu> filees mi principal herramienta de identificación de archivos y siempre me sorprende lo mucho que puede decir incluso sobre formatos de archivos exóticos. Por supuesto, su aplicación creció un poco desde los años 80 :)
espectros
8

Si tiene instalado Exiftool , puede hacer lo siguiente:

bash-4.3 # exiftool continents_blank_l.png 
Número de versión de ExifTool: 10.20
Nombre de archivo: continents_blank_l.png
Directorio:.
Tamaño de archivo: 170 kB
Fecha / hora de modificación del archivo: 2016: 07: 05 07: 59: 28 + 05: 30
Fecha / hora de acceso al archivo: 2017: 08: 07 00: 35: 15 + 05: 30
Fecha / hora de cambio de código de archivo: 2016: 07: 05 07: 59: 28 + 05: 30
Permisos de archivos: rw-r - r--
Tipo de archivo: PNG
Extensión de tipo de archivo: png
Tipo MIME: image / png
Ancho de imagen: 1100
Altura de la imagen: 850
Profundidad de bits: 8
Tipo de color: RGB con alfa
Compresión: desinflar / inflar
Filtro: adaptativo
Entrelazado: sin entrelazar
Color de fondo: 255 255 255
Píxeles por unidad X: 3937
Píxeles por unidad Y: 3937
Unidades de píxeles: metros
Fecha de modificación: 2016: 07: 05 02:29:28
Tamaño de imagen: 1100x850
Megapíxeles: 0.935
Señor del Fuego
fuente
5

El camino del hacker: mira los bytes reales dentro del fragmento PNG IHDR .

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

El primer número te dice la profundidad de bits. El segundo, el tipo de color (2 es para imágenes RGB, es decir, imágenes con tres canales o tres valores de muestra por píxel).

Por lo tanto, en este caso tenemos un PNG RGB8 (24 bits por píxel).

leonbloy
fuente
¿No es ese PNG24 (8 bits por canal)? PNG8 es un mapa de colores de 8 bits = 256 colores.
evilSnobu
1
Sí, RGB8 corresponde a PNG24.
leonbloy
Correcto. Culpa mía. Lo leí como PNG8, no como RGB8. Tu respuesta es completamente correcta.
evilSnobu
3

Como alternativa al uso anterior de "archivo" que se basa en la magia del archivo en el encabezado del archivo PNG, si se trabaja con archivos PNG, es útil tener instalado el paquete " pngtools ".

pnginfo se puede usar para dar detalles completos de las propiedades del archivo PNG, incluyendo BitDepth (Bits / Sample) (que no debe confundirse con otra propiedad, 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 
 ...

El equivalente para archivos JPEG es jpeginfo, en su propio paquete jpeginfo.

El formato de la salida de pnginfo facilita la extracción del valor de BitDepth (ya que está en una línea separada) si se usa en un script de shell.

Si el archivo no es en realidad un archivo PNG, porque, por ejemplo, es un archivo JPEG con un nombre incorrecto, pnginfo informará "Este archivo no es un archivo PNG válido".

Como siempre, la herramienta adecuada para el trabajo está determinada, entre otras cosas, por la frecuencia con la que va a utilizar la herramienta y cómo desea procesar la salida.

JG Miller
fuente