Como obter informações sobre uma imagem (imagem) na linha de comando do Linux?


257

Estou trabalhando em um aplicativo da web e atualmente estou migrando algumas coisas de um aplicativo antigo, mas odeio ter que abrir um editor de imagens para obter informações sobre as imagens que estou migrando. Coisas como dimensões da imagem.

Existe uma ferramenta de linha de comando que eu possa usar para essas tarefas no Linux?

Respostas:


263

Para alguns formatos de imagem, você pode simplesmente usar o filecomando:

$ 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 notavelmente não):

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

Para quem você terá que usar algo mais elaborado, como:

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

O convertcomando faz parte do pacote ImageMagick.


7
Poderia ser apenas eu, mas parece que o imagemagick está realmente carregando dados de imagem lá, uma vez que é executado muito lentamente. imo identifydeve ser usado em vez disso
jozxyqk 5/14

1
oh, /dev/nullé um argumento hehe #
Aquarius Power

FWIW este é o que eu usei para obter a data e hora de criação de uma foto:identify -format "%[EXIF:DateTimeOriginal]\n" foobar.jpg
kralyk

2
A versão atual do filesuporta a exibição do tamanho de JPEG sem parâmetros adicionais: $ file foo.jpgretornos foo.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=1], baseline, precision 8, 120x120, frames 3
Cœur

199

A melhor maneira de obter essas informações é usando o identifycomando:

$ identify image.png

ou apenas atributos de tamanho

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

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

$ sudo apt-get install imagemagick

1
As especificações para a string de formato podem ser encontradas no manual GraphicsMagick .
Sjoerd

10
Vou adicionar a -verbosebandeira. Eu precisava encontrar DPI (que estão no campo Resolution)
GC5

para o CentOS do: yum instale o ImageMagick
arrumado

Essa resposta funciona com jpegs e fornece as informações necessárias para instalá-lo.
Hugh Perkins

3
@fbrundu como é DPI dizem respeito a uma resolução como72x72
Seanny123

27

O exiv2 é "a ferramenta" para obter informações dos arquivos 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

mediainfo daria informações ainda mais detalhadas. Geralmente está nos repositórios padrão no Linux e também está disponível via homebrew no OSX.

Tente, por exemplo, executar na pasta atual:

mediainfo *

ou

mediainfo .

Ambos os comandos mostrarão informações sobre todos os arquivos de mídia na pasta e subpastas atuais.

Mostrar informações sobre todas as imagens JPG começando na pasta atual (inclui subpastas):

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

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

Há também uma GUI disponível em repositórios padrão para todas as principais distribuições geralmente denominadas mediainfo-gui


19

Além disso, confira o 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

Aliás, eu estava procurando obter 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, consulte Desejo alterar o DPI com o Imagemagick sem alterar o tamanho real dos bytes dos dados da imagem - Superusuário - no entanto, identify -verboseparece funcionar para a mesma imagem do fragmento 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 do PixelsPerInch usando identify -verbose- consulte ImageMagick • Exibir tópico - Não é possível definir unidades como pixels por polegada? .


Bom: identify -verboseé a única ferramenta que eu descobri que relata a qualidade do JPG. Por exemplo, dirá Quality: 90.
tanius

15
identify -verbose image.png

identificar é do pacote ImageMagick.

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


7

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

rdjpgcom -verbose photo.jpg

Ele mostrará informações como:

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


6

Acabei de descobrir que menos (com lessfile / lesspipe) pode realmente exibir informações da imagem usando o ImageMagick nos bastidores:

sudo apt-get install imagemagick
less wallpaper.jpg

Resultado

wallpaper.jpg JPEG 1920x1200 1920x1200+0+0 8-bit DirectClass 580KB 0.000u 0:00.000

Isso é uma piada? Eu tentei isso, e apareceu um aviso perguntando-me se eu realmente quero ler um arquivo binário, e então ele só mostrou um monte de binário ... (usando Ubuntu 14.04)
Hugh Perkins

Você precisa instalar o ImageMagick para que ele funcione. Eu mencionei que ele usa o ImageMagick nos bastidores, não é?
Thanh DK

1
Uma maneira bastante idiota de fazer isso ... se você tiver o imageMagick instalado, use o comando de identificação.
Mike Q

4

Outro método não postado acima, está usando o feh (você precisa instalá-lo):

feh -l image.jpg

Resultado:

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

Usando:

feh -l *.jpg

Produzirá uma tabela (como acima), mas com todas as informações de imagens (incrementando a coluna NUM). Útil para usar em scripts.


2

A ferramenta que você deseja é file.

Ele mostra uma quantidade surpreendente de informações sobre todos os tipos de arquivos.

A sintaxe é:

$ file my_pic.jpg


2

Você pode usar :

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

Você também pode substituir file://porhttp://


Ao fazer isso, você pode fazer o mesmo, mas usando argumentos da linha de comando para torná-lo um pouco mais fácil de usar. php -r "print_r(getimagesize(\$argv[1]));"
Kevin Schroeder

2

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

pngmeta file.png

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


não dizendo nenhum dpi no ubuntu
typelogic 27/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.