Respostas:
O file
uso do comando em outras respostas às vezes é inconsistente. Por exemplo:
───────────────────────────────────────────────────────────────────────────────
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
A primeira instância provavelmente é uma foto da câmera e a segunda instância que tirei usando uma captura de tela.
O identify
comando no qual minha resposta se baseia parece funcionar corretamente em todas as instâncias. Por exemplo, teste na primeira instância acima:
rick@dell:~/Pictures$ identify "256 colors.jpg"
256 colors.jpg JPEG 800x800 800x800+0+0 8-bit sRGB 45KB 0.000u 0:00.000
Eu tenho o ImageMagick instalado, o 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 um relatório resumido, omita todos os parâmetros:
$ identify vnStat.png
vnStat.png PNG 410x121 410x121+0+0 8-bit sRGB 14.7KB 0.000u 0:00.000
Substitua vnStat.png
pelo seu próprio .png
nome de arquivo e, se necessário, anteceda-o pelo caminho.
Para entender PNG-24 vs PNG-32, esta resposta do SuperUser resume:
Se sua imagem é de 24 bits, você verá:
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Se sua imagem PNG for 32 bits, você verá:
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
alpha: 8-bit
No entanto, esta resposta não está completa porque as cores de 8 bits também mostram 8 bits para vermelho, verde e azul, apenas uma paleta de cores é usada para limitar o número de seleções (como no bom e velho Windows 2.0).
Examine estas três imagens do Artigo de profundidade da Wikipedia :
Nome do arquivo: 8_bit.png
Usando:
identify -verbose 8_bit.png | grep colors
png:PLTE.number_colors: 249
Vemos que existem 249 cores usadas. O máximo possível com 8 bits é de 256 cores.
Nome do arquivo: 4_bit.png
Usando:
identify -verbose 4_bit.png | grep colors
png:PLTE.number_colors: 16
Vemos que existem 16 cores usadas, que são as combinações máximas de cores possíveis com 4 bits.
Nome do arquivo: 2_bit.png
Usando:
$ identify -verbose 2_bit.png | grep colors
png:PLTE.number_colors: 4
Vemos que existem 4 cores usadas, que são as combinações máximas de cores possíveis com 2 bits.
PNG de 32 bits (8 bits por canal - com alfa, também chamado de "PNG de 24 bits com 8 bits de alfa" ou "PNG24 com 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 - sem canal alfa)
$ file 24.png
PNG image data, 1060 x 821, 8-bit/color RGB, non-interlaced
PNG de 8 bits (256 cores):
$ file 8bit.png
PNG image data, 1060 x 821, 8-bit colormap, non-interlaced
file
é minha principal ferramenta de identificação de arquivos e sempre fico impressionado com o quanto ele pode dizer sobre formatos de arquivo exóticos. Concedido, sua implementação cresceu um pouco desde os anos 80 :)
Se você tiver o exiftool instalado, poderá:
bash-4.3 # exiftool continents_blank_l.png Número da versão ExifTool: 10.20 Nome do arquivo: continents_blank_l.png Diretório:. Tamanho do arquivo: 170 kB Data / hora da modificação do arquivo: 2016: 07: 05 07: 59: 28 + 05: 30 Data / Hora de acesso ao arquivo: 2017: 08: 07 00: 35: 15 + 05: 30 Data / Hora da Alteração do Inode do Arquivo: 2016: 07: 05 07: 59: 28 + 05: 30 Permissões do arquivo: rw-r - r-- Tipo de Arquivo: PNG Extensão de tipo de arquivo: png Tipo MIME: image / png Largura da imagem: 1100 Altura da imagem: 850 Profundidade de bits: 8 Tipo de cor: RGB com alfa Compressão: Desinflar / Inflar Filtro: Adaptável Entrelaçado: Não entrelaçado Cor de fundo: 255 255 255 Pixels por unidade X: 3937 Pixels por unidade Y: 3937 Unidades de pixel: metros Data da modificação: 2016: 07: 05 02:29:28 Tamanho da imagem: 1100x850 Megapixels: 0.935
A maneira do hacker: espie os bytes reais dentro do bloco PNG IHDR .
$ od -j 24 -N 2 -t u1 -An drivemount-applet_open.png
8 2
O primeiro número indica a profundidade de bits. O segundo, o tipo de cor (2 é para imagens RGB, ou seja, imagens com três canais ou três valores de amostra por pixel).
Portanto, neste caso, temos um PNG RGB8 (24 bits por pixel).
Como alternativa ao uso acima de "arquivo", que depende da mágica do arquivo no cabeçalho do arquivo PNG, se estiver trabalhando com arquivos PNG, é útil ter o pacote " pngtools " instalado.
O pnginfo pode ser usado para fornecer detalhes completos das propriedades do arquivo PNG, incluindo o BitDepth (Bits / Sample) (que não deve ser confundido com outra propriedade, a profundidade do pixel).
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
...
O equivalente para arquivos JPEG é jpeginfo, em seu próprio pacote jpeginfo.
O formato da saída do pnginfo facilita a extração do valor do BitDepth (como em uma linha separada) se ele estiver sendo usado em um script de shell.
Se o arquivo não for realmente um arquivo PNG, porque, por exemplo, é um JPEG com nome incorreto, o pnginfo informará "Este arquivo não é um arquivo PNG válido".
Como sempre, a ferramenta apropriada para o trabalho é determinada, entre outras coisas, pela frequência com que você vai usar a ferramenta e como deseja processar a saída.
identify -format %z
- consulte as opções de formato do ImageMagick para obter mais.