Làm cách nào để lấy thông tin về một hình ảnh (hình ảnh) từ dòng lệnh Linux?


257

Đang làm việc trên một ứng dụng web và hiện đang di chuyển một số nội dung từ một ứng dụng cũ, nhưng tôi ghét rằng tôi phải mở trình chỉnh sửa hình ảnh để có một số thông tin về hình ảnh tôi đang di chuyển. Những thứ như kích thước hình ảnh.

Có công cụ dòng lệnh nào tôi có thể sử dụng cho các tác vụ như vậy trong Linux không?

Câu trả lời:


263

Đối với một số định dạng hình ảnh, bạn chỉ cần sử dụng filelệnh:

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

Không phải tất cả các định dạng hình ảnh đều báo cáo kích thước (đáng chú ý nhất là JPEG):

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

Đối với những người bạn sẽ phải sử dụng một cái gì đó chi tiết hơn, như:

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

Các convertlệnh này là một phần của gói ImageMagick.


7
Chỉ có thể là tôi nhưng có vẻ như hình ảnh thực sự đang tải dữ liệu hình ảnh ở đó vì nó chạy khá chậm. imo identifynên được sử dụng thay thế
jozxyqk

1
ồ, /dev/nulllà một cuộc tranh cãi hehe
Sức mạnh của Bảo Bình

FWIW đây là những gì tôi đã sử dụng để có được thời gian tạo của ảnh:identify -format "%[EXIF:DateTimeOriginal]\n" foobar.jpg
kralyk

2
Phiên bản hiện tại filekhông hỗ trợ hiển thị kích thước của JPEG mà không cần tham số bổ sung: $ file foo.jpgtrả về 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
Cur

199

Cách tốt nhất để có được thông tin này là sử dụng identifylệnh:

$ identify image.png

hoặc chỉ kích thước thuộc tính

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

Nó là một phần của ImageMagick, bạn có thể cài đặt trên Ubuntu như sau:

$ sudo apt-get install imagemagick

1
Thông số kỹ thuật cho chuỗi định dạng có thể được tìm thấy trong hướng dẫn sử dụng GraphicsMagick .
Sjoerd

10
Tôi sẽ thêm -verbosecờ. Tôi cần tìm DPI (có trong Nghị quyết hiện trường)
gc5

đối với CentOS do: yum cài đặt ImageMagick
gọn gàng

Câu trả lời này vừa hoạt động với jpeg, vừa cung cấp thông tin cần thiết để cài đặt nó.
Hugh Perkins

3
@fbrundu DPI liên quan đến độ phân giải như thế nào72x72
Seanny123

27

exiv2 là "công cụ" để lấy thông tin từ các tệp ảnh:

~$exiv2 myimage.jpg

đầu ra:

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 sẽ cung cấp thông tin chi tiết hơn nữa. Nó thường có trong các bản repos tiêu chuẩn trên Linux và cũng có sẵn thông qua homebrew trên OSX.

Ví dụ thử chạy trong thư mục hiện tại:

mediainfo *

hoặc là

mediainfo .

Cả hai lệnh sẽ hiển thị thông tin trên tất cả các tệp phương tiện trong thư mục hiện tại và các thư mục con.

Hiển thị thông tin trên tất cả các hình ảnh JPG bắt đầu từ thư mục hiện tại (bao gồm các thư mục con):

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

Nó cũng rất hữu ích với các tập tin âm thanh và video, trong đó nó cho thấy bitrate của tất cả các dòng audio / video, mã hóa algorythm, container loại, mã FOURCC, tức là XVID, X264vv

Ngoài ra còn có một GUI có sẵn trong các repos tiêu chuẩn cho tất cả các phân phối chính thường được đặt tên mediainfo-gui


19

Ngoài ra, hãy xem ExifTool của Phil Harvey ; một ví dụ:

$ 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, tôi đang tìm cách lấy thông tin về dpi / độ phân giải từ dòng lệnh; và thật thú vị, đôi khi không có công cụ nào trong số này báo cáo rằng trong một hình ảnh (như trong đoạn trích trên); để biết thêm về điều đó, hãy xem Tôi muốn thay đổi DPI bằng Imagemagick mà không thay đổi kích thước byte thực của dữ liệu hình ảnh - Tuy nhiên, Siêu người dùng - identify -verbosedường như hoạt động với cùng một hình ảnh như trong đoạn trích trước:

$ 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

... mặc dù, có thể hơi khó khăn khi đọc độ phân giải theo đơn vị PixelsPerInch bằng cách sử dụng identify -verbose- xem ImageMagick • Xem chủ đề - Không thể đặt đơn vị thành pixelperinch? .


Nice: identify -verboselà công cụ duy nhất tôi thấy báo cáo chất lượng JPG. Ví dụ nó sẽ nói Quality: 90.
tanius

15
identify -verbose image.png

xác định là từ gói ImageMagick.

Nó cũng trích xuất thông tin exif từ hình ảnh jpeg.


7

Bạn có thể thử lệnh này nếu câu trả lời trên không hoạt động:

rdjpgcom -verbose photo.jpg

Nó sẽ hiển thị thông tin như:

Hình ảnh JPEG là 564w * 779h, 3 thành phần màu, 8 bit cho mỗi mẫu


6

Tôi mới phát hiện ra rằng ít hơn (với lessfile / lesspipe) thực sự có thể hiển thị thông tin hình ảnh bằng cách sử dụng ImageMagick đằng sau hậu trường:

sudo apt-get install imagemagick
less wallpaper.jpg

Đầu ra

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

Đây có phải là một trò đùa? Tôi đã thử điều này và nó hiện lên một cảnh báo hỏi tôi có thực sự muốn đọc tệp nhị phân không, và sau đó nó chỉ hiển thị một bó nhị phân ... (sử dụng Ubuntu 14.04)
Hugh Perkins

Bạn cần cài đặt ImageMagick để nó hoạt động. Tôi đã đề cập rằng nó sử dụng ImageMagick đằng sau hậu trường, phải không?
Thanh DK

1
Khá là một cách ngu ngốc để làm điều đó ... nếu bạn đã cài đặt imageMagick, chỉ cần sử dụng lệnh xác định.
Mike Q

4

Phương pháp khác không được đăng ở trên, là sử dụng feh (bạn cần cài đặt nó):

feh -l image.jpg

Đầu ra:

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

Sử dụng:

feh -l *.jpg

Sẽ xuất một bảng (như trên) nhưng với tất cả thông tin hình ảnh (tăng cột NUM). Hữu ích để sử dụng trong các kịch bản.


2

Công cụ bạn muốn là file.

Nó cho thấy một lượng thông tin đáng ngạc nhiên về tất cả các loại tệp.

Cú pháp là:

$ file my_pic.jpg


2

Bạn có thể dùng :

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

Ngoài ra, bạn có thể thay thế file://bằnghttp://


Bạn có thể làm điều tương tự, nhưng sử dụng dòng lệnh để làm cho nó dễ sử dụng hơn một chút. php -r "print_r(getimagesize(\$argv[1]));"
Kevin Schroeder

2

Nếu bạn đang xử lý các PNG, có thể có các thuộc tính mà tôi thấy khó đọc với hầu hết mọi phần mềm. Đối với những người, bạn nên sử dụng pngmeta:

tập tin pngmeta.png

Điều đó đặc biệt hữu ích cho hình thu nhỏ, vì, theo tiêu chuẩn FreeDesktop, phải được định dạng PNG và lưu trữ thông tin đường dẫn dưới dạng một thuộc tính PNG (Thumb :: URI).


không nói với bất kỳ dpi nào trong Ubuntu
typelogic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.