Bash・コマンドラインで画像ファイルの情報を取得する (ImageMagick)

Bash 上で、画像ファイルの幅や高さの情報なんかを取得したいなと思った。ImageMagick が提供する identify コマンドを使えば上手くいけた。

目次

検証したバージョン

$ brew install imagemagick

$ identify -version
Version: ImageMagick 7.1.0-8 Q16-HDRI x86_64 2021-09-18 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(4.5)
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg lcms lqr ltdl lzma openexr png ps tiff webp xml zlib
Compiler: gcc (4.2)
$ apt install imagemagick -y

$ identify -version
Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

メジャーバージョンが異なるが、出力される内容は一緒だった。

基本的な使い方

オプションなどナシで identify コマンドを叩けば、とりあえず幅・高さなどは分かる。

$ identify example.png
example.png PNG 1832x688 1832x688+0+0 8-bit sRGB 192639B 0.000u 0:00.000

$ identify example.jpg
example.jpg JPEG 320x260 320x260+0+0 8-bit sRGB 15775B 0.000u 0:00.000

-verbose を使うとこんな風に詳細が出る。

$ identify -verbose example.png
Image:
  Filename: example.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 1832x688+0+0
  Resolution: 144x144
  Print size: 12.7222x4.77778
  Units: PixelsPerInch
  Colorspace: sRGB
  Type: TrueColorAlpha
  Base type: Undefined
  Endianness: Undefined
  Depth: 8-bit
  Channel depth:
    Red: 8-bit
    Green: 8-bit
    Blue: 8-bit
    Alpha: 1-bit
  Channel statistics:
    Pixels: 1260416
    Red:
      min: 34  (0.133333)
      max: 255 (1)
      mean: 239.154 (0.93786)
      median: 240 (0.941176)
      standard deviation: 38.8098 (0.152195)
      kurtosis: 16.6535
      skewness: -4.00835
      entropy: 0.256342
    Green:
      min: 34  (0.133333)
      max: 255 (1)
      mean: 240.001 (0.941182)
      median: 240 (0.941176)
      standard deviation: 38.5993 (0.15137)
      kurtosis: 17.4013
      skewness: -4.1278
      entropy: 0.256674
    Blue:
      min: 34  (0.133333)
      max: 255 (1)
      mean: 238.892 (0.93683)
      median: 240 (0.941176)
      standard deviation: 40.574 (0.159114)
      kurtosis: 14.9682
      skewness: -3.87756
      entropy: 0.257157
    Alpha:
      min: 255  (1)
      max: 255 (1)
      mean: 255 (1)
      median: 255 (1)
      standard deviation: 0 (0)
      kurtosis: 8.192e+51
      skewness: 1e+36
      entropy: 0
  Image statistics:
    Overall:
      min: 34  (0.133333)
      max: 255 (1)
      mean: 243.262 (0.953968)
      median: 243.75 (0.955882)
      standard deviation: 29.4958 (0.11567)
      kurtosis: 22.8396
      skewness: -4.67581
      entropy: 0.192543
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Matte color: grey74
  Background color: white
  Border color: srgb(223,223,223)
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 1832x688+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Profiles:
    Profile-exif: 144 bytes
    Profile-icc: 4064 bytes
    Profile-xmp: 449 bytes
  Properties:
    date:create: 2021-11-10T05:34:44+00:00
    date:modify: 2021-10-27T07:34:31+00:00
    exif:ExifOffset: 78
    exif:PixelXDimension: 1832
    exif:PixelYDimension: 688
    exif:UserComment: 65, 83, 67, 73, 73, 0, 0, 0, 83, 99, 114, 101, 101, 110, 115, 104, 111, 116
    icc:copyright: Copyright Apple Inc., 2021
    icc:description: Display
    png:iCCP: chunk was found
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 6
    png:IHDR.color_type: 6 (RGBA)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 1832, 688
    png:pHYs: x_res=5669, y_res=5669, units=1
    signature: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    xmp:PixelXDimension: 1832
    xmp:PixelYDimension: 688
    xmp:UserComment: Screenshot
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 192639B
  Number pixels: 1.26042M
  Pixels per second: 35.6634MP
  User time: 0.060u
  Elapsed time: 0:01.035
  Version: ImageMagick 7.1.0-8 Q16-HDRI x86_64 2021-09-18 https://imagemagick.org

幅や高さだけを取得する

-format オプションで幅・高さだけ取得、などができる。

$ identify -format '%wx%h' example.png
1832x688

$ identify -format '%w' example.png
1832

$ identify -format '%h' example.png
688

組み込みの file コマンドでも分かる

ImageMagick をインストールしなくても、file コマンドでも一応サイズなどの情報は調べられた。

形式の調整が難しいので、「幅だけ取得」とかは難しそう。目視確認で十分ならコレでも良いかも。

$ file example.png
example.png: PNG image data, 1832 x 688, 8-bit/color RGBA, non-interlaced

$ file example.gif
example.gif: GIF image data, version 89a, 400 x 400

$ file example.jpg
example.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90", baseline, precision 8, 64x64, components 3

以上

$ identify -format '%w %h' で良さそうだ。

ImageMagick は identify コマンドの他に、convert という画像変換のコマンドも提供してくれる。コレもなかなか便利だ。

なお、Windows コマンドプロンプトだと、ファイルシステムを NTFS に変更するためのコマンドとして convert.exe が標準搭載されているので、ImageMagick の convert コマンドと名前がバッティングしてしまうことに留意。