【Alpine Linux対応】Exiftoolコマンドから画像サイズを調べる


2021/09/02
蛸壺の技術ブログ| Exiftoolコマンドから画像サイズを調べる

画像のサイズを取得したい場合には、画像ビューアを開いてそのサイズを表示させたり、ファイラの詳細情報から確認出来たりもします。

ではこのような画像ファイルの設定値をコマンドラインから読み取るにはどうしたら良いのでしょうか。

今回はLinuxコマンドから画像のExifを読み出してみる方法を考えてみます。


Exifとは

画像や動画にはExif(Exchangeable image file format)と呼ばれるメタデータが含まれています。

このExifの中にはその画像に関連する情報が保持されており、例えば画像が撮影されたGPS座標や撮影日時などを取得できます。

今回は画像サイズを知りたいという用途ですが、これもExifを読み出すことでコマンドラインから簡単に出力できます。

参考|Exchangeable image file format


alpine linuxにexiftoolをインストール

exiftoolは今日日ほとんどのLinuxディストリビューションで簡単にパッケージインストールすることができます。

とりわけ著者が個人でDockerコンテナ等でお世話になっているAlpine Linuxコンテナ内でもパッケージ版が提供されているのも有り難い点です。

            
            $ apk add --no-cache exiftool
#👇インストールしたバージョンの確認
$ exiftool -ver
12.30
        

exiftoolはほとんどの画像や動画ファイルのExifメタデータを編集する高機能ツールであるため、コマンドオプションがかなり複雑です。

またExifメタ情報を呼び出す定番である
ImageMagickのユーティリティツールであるidentifyのように利用することもできます。

Exifの編集という点においては最高峰のフリーツールであることは間違い無いですが、今回のように簡単な用途であれば
identifyの方がもう少し軽量に動作するかもしれません。

なおalpine linux向けのパッケージ版imagemagickも利用可能です。


exiftoolから画像サイズを取得

ここでは適当なJPEG画像でexiftoolを使ってみましょう。

            
            $ exiftool 0.jpg
ExifTool Version Number         : 12.30
File Name                       : 0.jpg
Directory                       : user/hoge
File Size                       : 68 KiB
File Modification Date/Time     : 2021:06:24 09:18:50+00:00
File Access Date/Time           : 2021:08:31 12:13:19+00:00
File Inode Change Date/Time     : 2021:06:24 09:18:50+00:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Exif Byte Order                 : Little-endian (Intel, II)
X Resolution                    : 300
Y Resolution                    : 300
Resolution Unit                 : inches
Software                        : GIMP 2.10.8
Modify Date                     : 2021:06:22 17:33:41
Compression                     : JPEG (old-style)
Photometric Interpretation      : YCbCr
Samples Per Pixel               : 3
Thumbnail Offset                : 260
Thumbnail Length                : 14408
XMP Toolkit                     : XMP Core 4.4.0-Exiv2
Document ID                     : gimp:docid:gimp:aab6a91a-be04-421f-909d-4c518d6c9d69
Instance ID                     : xmp.iid:b99c6598-27dd-4490-ae48-f3a30977e265
Original Document ID            : xmp.did:cb01054a-183b-4411-81b2-e9befa182810
Api                             : 2.0
Platform                        : Linux
Time Stamp                      : 1624350822276598
Version                         : 2.10.8
Format                          : image/jpeg
Creator Tool                    : GIMP 2.10
Location Created                : 
Location Shown                  : 
Artwork Or Object               : 
Registry ID                     : 
History Action                  : saved
History Changed                 : /
History Instance ID             : xmp.iid:42b5d359-680a-4aaa-be28-9b04473226fb
History Software Agent          : Gimp 2.10 (Linux)
History When                    : +09:00
Image Supplier                  : 
Image Creator                   : 
Copyright Owner                 : 
Licensor                        : 
Current IPTC Digest             : fb6f595a0147c60cd9eabd5ce65828a5
Date Created                    : 2021:06:22
Time Created                    : 17:33:41-17:33
Image Width                     : 400
Image Height                    : 346
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 400x346
Megapixels                      : 0.138
Thumbnail Image                 : (Binary data 14408 bytes, use -b option to extract)
Date/Time Created               : 2021:06:22 17:33:41-17:33
Date/Time Original              : 2021:06:22 17:33:41-17:33
        
デフォルトでは基本的なメタ情報が全て取得されてしまうので、ファイルサイズだけに絞りたいならば-imagesizeオプションを使いましょう。

            
            $ exiftool -imagesize 0.jpg
Image Size                      : 400x346
        
画像サイズ以外にもお目立ての情報があればexiftool -hから該当のオプション引数を探せば同じように絞った表示が可能ですが、exiftoolのオプションはかなり多岐に渡っているので、メタデータを取得・表示したい程度であれば、grepでパイプするほうが早いです。

            
            $ exiftool 0.jpg | grep MIME
MIME Type                       : image/jpeg
        

recursiveで使う

もちろんシェルで使う場合にはwhileループなどでディレクトリ内のファイルを一つ一つ読み取ってexiftoolで捌いても良いのですが、-rオプションでも同じようにすることが可能です。

hogeフォルダに複数個の画像(jpeg)ファイルがあったとして、

            
            $ tree
.
└── hoge
    ├── 0.jpg
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.jpg
    └── 4.jpg
        
このhogeフォルダに含まれるjpg画像の画像サイズを全て取得させる場合には以下のように書けます。

            
            $ exiftool -r -imagesize -ext jpg hoge/
======== hoge/0.jpg
Image Size                      : 350x407
======== hoge/1.jpg
Image Size                      : 548x800
======== hoge/2.jpg
Image Size                      : 410x67
======== hoge/3.jpg
Image Size                      : 872x592
======== hoge/4.jpg
Image Size                      : 727x734
    1 directories scanned
    5 image files read
        
grepやsedで出力の見栄えを調整して、さらに見やすい感じにカスタマイズもできます。

            
            $ exiftool -r -imagesize -ext jpg hoge/ | grep Size
Image Size                      : 350x407
Image Size                      : 548x800
Image Size                      : 410x67
Image Size                      : 872x592
Image Size                      : 727x734
        

まとめ

以上、画像ファイルのサイズを一気にコマンドラインでExifメタデータから出力させたいときに便利なexiftoolの簡単な使い道を解説してみました。

Exifからは様々な情報が取得できますので、画像サイズだけでなく色々と応用が効くと思います。そこら辺は各人でどう応用できるか研究してみてはいかがかと思います。

参考サイト

ExifTool by Phil Harvey - Read, Write and Edit Meta Information!

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。