Questão Como obter informações sobre uma imagem (imagem) da linha de comando do Linux?


Estou trabalhando em um aplicativo da web e atualmente estou migrando algumas coisas de um aplicativo antigo, mas detesto ter que abrir um editor de imagens para obter algumas 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?


208


origem




Respostas:


Para alguns formatos de imagem você pode simplesmente usar o file comando:

$ 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 formato JPEG, principalmente, não):

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

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

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

o convert O comando faz parte do pacote ImageMagick.


208



Poderia ser apenas eu, mas parece que o imagemagick está realmente carregando dados de imagem lá, pois ele é executado muito lentamente. imo identify deve ser usado em vez - jozxyqk
oh /dev/null é um argumento hehe - Aquarius Power
FWIW isto é o que eu usei para obter a data e hora de criação de uma foto: identify -format "%[EXIF:DateTimeOriginal]\n" foobar.jpg - kralyk
Versão atual do filesuporta exibição do tamanho de JPEG sem parâmetro adicional: $ file foo.jpg retorna 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


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

$ identify image.png

ou apenas atributos de tamanho

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

Faz parte do ImageMagick, que você pode instalar no Ubuntu da seguinte forma:

$ sudo apt-get install imagemagick

179



As especificações da string de formato podem ser encontradas no Manual do GraphicsMagick. - Sjoerd
Vou adicionar o -verbose bandeira. Eu precisava encontrar DPI (que estão no campo Resolução) - gc5
para CentOS do: yum install ImageMagick - tidy
Essa resposta funciona com jpegs e fornece as informações necessárias para instalá-lo. - Hugh Perkins
@fbrundu como DPI se relaciona com uma resolução como 72x72 - Seanny123


exiv2 é "a ferramenta" para obter informações de 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    :

22





mediainfo daria informações ainda mais detalhadas. Geralmente é no repositório padrão do Linux, e também 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 atual e nas subpastas.

Mostrar informações sobre todas as imagens JPG a partir da pasta atual (inclui subpastas):

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

Também é muito útil em arquivos de áudio e vídeo, pois mostra a taxa de bits de todos os fluxos de áudio / vídeo, codificação de algoritmo, tipo de contêiner, código FOURCC, ou seja, XVID, X264etc.

Há também uma GUI disponível em repositórios padrão para todas as principais distros geralmente nomeadas mediainfo-gui


21





identify -verbose image.png

identificar é do pacote ImageMagick.

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


14





Além disso, confira ExifTool por 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 olhando para obter informações sobre dpi / resolução a partir da linha de comando; e, curiosamente, às vezes, nenhuma dessas ferramentas informa isso em uma imagem (como no snippet acima); para mais sobre isso, veja Eu quero mudar DPI com Imagemagick sem alterar o tamanho real do byte dos dados da imagem - Super User - Contudo, identify -verbose parece funcionar para a mesma imagem do 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, pode ser um pouco complicado ler a resolução em unidades de PixelsPerInch usando identify -verbose - Vejo ImageMagick • Exibir tópico - Não é possível definir unidades para pixelsperinch?.


12





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

rdjpgcom -verbose photo.jpg

Ele mostrará informações como:

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


7





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

sudo apt-get install imagemagick
less wallpaper.jpg

Saída

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

5



Isso é uma piada? Eu tentei isso, e ele apareceu um aviso me perguntando se eu realmente quero ler um arquivo binário, e então ele apenas mostrou um monte de binário ... (usando o Ubuntu 14.04) - Hugh Perkins
Você precisa instalar o ImageMagick para que ele funcione. Eu mencionei que ele usa o ImageMagick atrás da cena, não é? - Thanh DK
Uma maneira estúpida de fazer isso ... se você tiver o imageMagick instalado, apenas use o comando identify. - Mike Q