2011-04-26 09:28:39 +0000 2011-04-26 09:28:39 +0000
264
264

Como obter informação sobre uma imagem (imagem) da linha de comandos do Linux?

Estou a trabalhar num web-app, e actualmente estou a migrar algumas coisas de uma aplicação antiga, mas detesto ter de abrir um editor de imagens para obter alguma informação sobre as imagens que estou a migrar. Coisas como dimensões de imagem.

Existe alguma ferramenta de linha de comando que eu possa usar para tais tarefas no Linux?

Respostas (12)

270
270
270
2011-04-26 09:40:37 +0000

Para alguns formatos de imagem basta usar o comando file:

$ file MyPNG.png 
MyPNG.png: PNG image, 681 x 345, 8-bit/color RGB, non-interlaced

Nem todos os formatos de imagem relatam o tamanho (o JPEG mais notavelmente não):

$ file MyJpeg.jpg 
MyJpeg.jpg: JPEG image data, JFIF standard 1.01

Para aqueles que terá de usar algo mais elaborado, como:

$ convert MyJpeg.jpg -print "Size: %wx%h\n" /dev/null
Size: 380x380

O comando convert faz parte do pacote ImageMagick.

206
206
206
2011-12-23 14:16:38 +0000

A melhor maneira de obter esta informação é usando o comando identify:

$ identify image.png

ou apenas atributos de tamanho

$ identify -format "%wx%h" photo.jpg

Faz parte do ImageMagick, que pode instalar no Ubuntu assim:

$ sudo apt-get install imagemagick
30
30
30
2013-07-25 01:57:44 +0000

exiv2 é “a ferramenta” para obter informações de ficheiros de imagem:

~$exiv2 myimage.jpg

saídas:

File name : myimage.jpg
File size : 1196944 Bytes
MIME type : image/jpeg
Image size : 2592 x 1944
Camera make : LG Electronics
Camera model : LG-P970
Image timestamp : 2013:05:19 17:27:06
Image number : 
Exposure time : 1/9 s
Aperture : 
Exposure bias : 0 EV
Flash : Yes, compulsory
Flash bias : 
Focal length : 3.7 mm
Subject distance: 
ISO speed : 745
Exposure mode : 
Metering mode : Average
Macro mode : 
Image quality : 
Exif Resolution : 
White balance : Auto
Thumbnail : image/jpeg, 13776 Bytes
Copyright : 
Exif comment :
21
21
21
2011-12-23 17:22:07 +0000

O mediainfo daria informações ainda mais detalhadas. Está normalmente no repositório padrão no Linux, e também disponível via homebrew no OSX.

Tente por exemplo correr na pasta actual:

mediainfo *

ou

mediainfo .

Ambos os comandos irão mostrar informação em todos os ficheiros media na pasta e subpastas actuais.

Mostrar informação em todas as imagens JPG a partir da pasta actual (inclui subpastas):

find . -iname "*.jpg" -exec mediainfo {} \;

É também muito útil com ficheiros de áudio e vídeo, na medida em que mostra a taxa de bits de todos os fluxos de áudio/vídeo, codificação algorythm, tipo de contentor, código FOURCC, i.e. XVID, X264, etc.

Existe também uma GUI disponível em repositórios standard para todas as grandes distribuições normalmente chamadas mediainfo-gui

21
21
21
2014-02-13 12:33:36 +0000

Veja também ExifTool de Phil Harvey ; um exemplo:

$ exiftool test.png 
ExifTool Version Number : 8.15
File Name : test.png
Directory : .
File Size : 12 MB
File Modification Date/Time : 2014:02:13 13:04:52+01:00
File Permissions : rw-r--r--
File Type : PNG
MIME Type : image/png
Image Width : 2490
Image Height : 3424
Bit Depth : 8
Color Type : RGB
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Significant Bits : 8 8 8
Image Size : 2490x3424

Btw, eu estava procurando informações sobre dpi/resolução na linha de comando; e curiosamente, às vezes nenhuma dessas ferramentas informa isso em uma imagem (como no snippet acima); para saber mais sobre isso, veja Eu quero mudar o DPI com Imagemagick sem mudar o tamanho real do byte dos dados da imagem - Super User - entretanto, identify -verbose parece funcionar para a mesma imagem como no snippet anterior:

$ identify -verbose test.png 
Image: test.png
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 2490x3424+0+0
  Resolution: 72x72
  Print size: 34.5833x47.5556
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: RGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Red:
      min: 8 (0.0313725)
      max: 255 (1)
      mean: 237.541 (0.931533)
      standard deviation: 37.2797 (0.146195)
      kurtosis: 21.2876
      skewness: -4.56853
    Green:
      min: 15 (0.0588235)
      max: 255 (1)
      mean: 240.007 (0.941204)
      standard deviation: 37.8264 (0.148339)
      kurtosis: 20.7241
      skewness: -4.51584
    Blue:
      min: 9 (0.0352941)
      max: 255 (1)
      mean: 240.349 (0.942547)
      standard deviation: 38.7118 (0.151811)
      kurtosis: 22.255
      skewness: -4.72275
  Image statistics:
    Overall:
      min: 8 (0.0313725)
      max: 255 (1)
      mean: 179.474 (0.703821)
      standard deviation: 108.711 (0.426316)
      kurtosis: -0.958865
      skewness: -0.995795
  Rendering intent: Undefined
  Interlace: None
  Background color: white
  Border color: rgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Compose: Over
  Page geometry: 2490x3424+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2014-02-13T13:11:08+01:00
    date:modify: 2014-02-13T13:04:52+01:00
    signature: bada990d3ba29b311501146d9013d67cf36f667c6d39b1f28a72ce913924397d
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 12.52MB
  Number pixels: 8.526M
  Pixels per second: 7.894M
  User time: 1.080u
  Elapsed time: 0:02.080
  Version: ImageMagick 6.6.2-6 2012-08-17 Q16 http://www.imagemagick.org

. … embora, possa ser um pouco complicado ler a resolução em unidades de PixelsPerInch usando identify -verbose - veja ImageMagick - View topic - Cannot set units to pixelsperinch? .

15
15
15
2012-08-31 08:29:46 +0000
identify -verbose image.png

A identificação é da embalagem ImageMagick.

Também extrai informações exif da imagem jpeg.

7
7
7
2012-10-04 09:53:14 +0000

Você pode tentar este comando se as respostas acima não funcionarem:

rdjpgcom -verbose photo.jpg

JPEG imagem é 564w * 779h, 3 componentes de cor, 8 bits por amostra*

6
6
6
2012-12-20 07:26:18 +0000

Acabei de descobrir que menos (com lessfile/lesspipe) pode realmente mostrar informações de imagem usando ImageMagick atrás da cena:

sudo apt-get install imagemagick
less wallpaper.jpg

Output

wallpaper.jpg JPEG 1920x1200 1920x1200+0+0 8-bit DirectClass 580KB 0.000u 0:00.000
5
5
5
2013-01-25 04:04:20 +0000

Outro método não afixado acima, é usando feh (é necessário instalá-lo):

feh -l image.jpg

Saída:

NUM FORMAT WIDTH HEIGHT PIXELS SIZE(bytes) ALPHA FILENAME
1 jpeg 1280 960 1228800 91319 - image.jpg

Usando:

feh -l *.jpg

Saída de uma tabela (como acima) mas com toda a informação das imagens (incrementando a coluna NUM). Útil para usar em scripts.

2
2
2
2013-10-15 18:30:09 +0000

Pode utilizar :

php -r "print_r(getimagesize('file:///archives/Picture/12 farvardin/20120331_013.jpg'));"

Também pode substituir file:// por http://

2
2
2
2013-12-05 09:07:51 +0000

Se você está lidando com PNGs, pode haver atributos que eu achei difícil de ler com quase qualquer software. Para esses, você deve usar pngmeta:

pngmeta file.png

Isso é particularmente útil para miniaturas, uma vez que, de acordo com o padrão FreeDesktop, deve ser formatado PNG e armazenar informações de caminho como um atributo PNG (Thumb::URI).

2
2
2
2011-04-26 09:41:00 +0000

A ferramenta que pretende é file.

Mostra uma quantidade surpreendente de informação sobre todo o tipo de ficheiros.

A sintaxe é:

$ file my_pic.jpg