Jak uzyskać informacje o obrazie (obrazie) z wiersza poleceń systemu Linux?

257

Pracuję nad aplikacją internetową i obecnie migruję niektóre elementy ze starej aplikacji, ale nienawidzę tego, że muszę otworzyć edytor obrazów, aby uzyskać informacje o migrowanych obrazach. Rzeczy takie jak wymiary obrazu.

Czy istnieje narzędzie wiersza polecenia, którego można używać do takich zadań w systemie Linux?

nemesisfixx
źródło

Odpowiedzi:

263

W przypadku niektórych formatów obrazów możesz po prostu użyć filepolecenia:

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

Nie wszystkie formaty obrazów zgłaszają rozmiar (JPEG w szczególności nie):

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

Dla tych będziesz musiał użyć czegoś bardziej skomplikowanego, takiego jak:

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

convertPolecenia jest częścią pakietu ImageMagick.

Majenko
źródło
7
Może to po prostu ja, ale wygląda na to, że image ładuje dane obrazu, ponieważ działa dość wolno. identifyZamiast tego należy użyć imo
jozxyqk
1
och, /dev/nulljest argument hehe
Aquarius Power
FWIW tego właśnie użyłem, aby uzyskać datę utworzenia zdjęcia:identify -format "%[EXIF:DateTimeOriginal]\n" foobar.jpg
kralyk
2
Obecna wersja filenie obsługuje wyświetlania rozmiaru JPEG bez dodatkowego parametru: $ file foo.jpgreturn 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

Najlepszym sposobem na uzyskanie tych informacji jest użycie identifypolecenia:

$ identify image.png

lub tylko atrybuty rozmiaru

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

Jest częścią ImageMagick, którą możesz zainstalować na Ubuntu w następujący sposób:

$ sudo apt-get install imagemagick
Ielton
źródło
1
Specyfikacje ciągu formatu można znaleźć w podręczniku GraphicsMagick .
Sjoerd
10
Dodam -verboseflagę. Musiałem znaleźć DPI (które znajdują się w polu Rozdzielczość)
gc5
dla CentOS wykonaj: yum zainstaluj ImageMagick
tidy
Ta odpowiedź działa zarówno z JPEG, jak i zawiera informacje potrzebne do jej zainstalowania.
Hugh Perkins
3
@fbrundu, jak DPI odnosi się do rozdzielczości takiej jak72x72
Seanny123
27

exiv2 to „narzędzie” do uzyskiwania informacji z plików obrazów:

~$exiv2 myimage.jpg

wyjścia:

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    :
Antonio Molinaro
źródło
21

mediainfo dałoby jeszcze bardziej szczegółowe informacje. Zwykle znajduje się w standardowych repozytoriach w systemie Linux, a także jest dostępny przez homebrew w OSX.

Spróbuj na przykład uruchomić w bieżącym folderze:

mediainfo *

lub

mediainfo .

Oba polecenia pokażą informacje o wszystkich plikach multimedialnych w bieżącym folderze i podfolderach.

Pokaż informacje o wszystkich obrazach JPG, zaczynając od bieżącego folderu (obejmuje podfoldery):

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

Jest to również bardzo przydatne z plikami audio i wideo, w tym, że pokazuje bitrate wszystkich strumieni audio / wideo, algorytm kodowania typu kontenera, kod FOURCC, to znaczy XVID, X264itp

Istnieje również GUI dostępne w standardowych repozytoriach dla wszystkich głównych dystrybucji zwykle nazywanych mediainfo-gui

ccpizza
źródło
19

Sprawdź także ExifTool autorstwa Phila Harveya ; przykład:

$ 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

Przy okazji, szukałem informacji o rozdzielczości / rozdzielczości z wiersza poleceń; i co ciekawe, czasami żadne z tych narzędzi nie zgłasza tego na obrazie (jak w powyższym fragmencie); Aby uzyskać więcej informacji, zobacz Chcę zmienić DPI za pomocą Imagemagick bez zmiany rzeczywistego rozmiaru bajtów danych obrazu - superużytkownik - identify -verbosewydaje się jednak działać dla tego samego obrazu, co w poprzednim fragmencie:

$ 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

... chociaż odczytanie rozdzielczości w jednostkach PixelsPerInch może być nieco trudne przy użyciu identify -verbose- patrz ImageMagick • Zobacz temat - Nie można ustawić jednostek na pixelsperinch? .

sdaau
źródło
Fajnie: identify -verboseto jedyne narzędzie, które znalazłem, które informuje o jakości JPG. Na przykład powie Quality: 90.
tanius
15
identify -verbose image.png

Identyfikacja pochodzi z pakietu ImageMagick.

Wyodrębnia również informacje exif z obrazu JPEG.

Pierre-Damien
źródło
7

Możesz wypróbować to polecenie, jeśli powyższe odpowiedzi nie działają:

rdjpgcom -verbose photo.jpg

Wyświetli informacje takie jak:

Obraz w formacie JPEG to 564 w * 779 godz., 3 kolorowe komponenty, 8 bitów na próbkę

Scott Chu
źródło
6

Właśnie odkryłem, że less (z lessfile / lesspipe) może faktycznie wyświetlać informacje o obrazie za pomocą ImageMagick za sceną:

sudo apt-get install imagemagick
less wallpaper.jpg

Wynik

wallpaper.jpg JPEG 1920x1200 1920x1200+0+0 8-bit DirectClass 580KB 0.000u 0:00.000
Thanh DK
źródło
Czy to żart? Próbowałem tego i pojawiło się ostrzeżenie z pytaniem, czy naprawdę chcę odczytać plik binarny, a następnie wyświetlił kilka plików binarnych ... (przy użyciu Ubuntu 14.04)
Hugh Perkins
Musisz zainstalować ImageMagick, aby działał. Wspomniałem, że za sceną wykorzystuje ImageMagick, prawda?
Thanh DK
1
Całkiem głupi sposób na zrobienie tego ... jeśli masz zainstalowany imageMagick, po prostu użyj polecenia identify.
Mike Q,
4

Inna metoda nie wymieniona powyżej, używa feh (musisz ją zainstalować):

feh -l image.jpg

Wynik:

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

Za pomocą:

feh -l *.jpg

Wyświetli tabelę (jak wyżej), ale ze wszystkimi informacjami o obrazach (zwiększając kolumnę NUM). Przydatny do użycia w skryptach.

lepe
źródło
2

Narzędzie, które chcesz file.

Pokazuje zaskakującą ilość informacji o wszelkiego rodzaju plikach.

Składnia jest następująca:

$ file my_pic.jpg

boehj
źródło
2

Możesz użyć :

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

Ponadto można wymienić file://zhttp://

Zatoka Perska
źródło
Piggy backing na tym możesz zrobić to samo, ale używając argumentów wiersza poleceń, aby było trochę łatwiejsze w użyciu. php -r "print_r(getimagesize(\$argv[1]));"
Kevin Schroeder
2

Jeśli masz do czynienia z PNG, mogą istnieć atrybuty, które trudno mi odczytać w prawie każdym oprogramowaniu. Do tych należy użyć pngmeta:

plik pngmeta.png

Jest to szczególnie przydatne w przypadku miniatur, ponieważ zgodnie ze standardem FreeDesktop powinien być sformatowany w formacie PNG i przechowywać informacje o ścieżce jako atrybut PNG (Thumb :: URI).

jesjimher
źródło
nie mówi żadnej dpi w Ubuntu
typelogic