Imagemagickで画像の情報を取得する
identify -verbose -format PHP
皆様こんにちは。
基礎編の更新がご無沙汰になってしまっておりまして申し訳ないです。
本日はImagemagickで画像の各種情報を取得する方法、そして、それらをプログラミング上で利用する方法について書いてみたいと思います。
使用画像 )
in.png (4000 x 4000 pixel)
1. 画像の基本情報を取得する
画像のサイズやファイル形式など、画像の基本情報のみを取得したい場合には、以下のように単純に identifyコマンドを使用します。
identify in.png
実行結果 )
in.png PNG 4000x4000 4000x4000+0+0 8-bit sRGB 9392950B 0.000u 0:00.000
実行すると上記のようにスペース区切りで画像情報が出力されます。
出力されている画像情報は以下の通りです。
[ファイル名] [ファイル形式] [サイズ(pixel)] [位置情報] [深度] [カラーモード] [サイズ(byte)] [ユーザー時間] [経過時間]
2. 画像の詳細情報を取得する
画像の更に細かい情報を取得したい場合は、オプション -verbose を追加します。
identify -verbose in.png
実行結果 )
Image: in.png Format: PNG (Portable Network Graphics) Mime type: image/png Class: DirectClass Geometry: 4000x4000+0+0 Resolution: 28.35x28.35 Print size: 141.093x141.093 Units: PixelsPerCentimeter Colorspace: sRGB Type: TrueColorAlpha Base type: Undefined Endianess: Undefined Depth: 8-bit ....(続く)
かなり詳細な情報がラベル名付きで出力されます。
3. 必要な情報を選択して取得する
オプション -formatとプロパティを組み合わせることで、出力したい情報を指定することができます。
identify -format "%[resolution.x],%[resolution.y],%[size],%[width],%[height],%[colorspace]" in.png
実行結果 )
28.35,28.35,9392950B,4000,4000,sRGB
-formatの後に %と[ ] で取得したいプロパティを指定します。
上記では
[X解像度] [Y解像度] [ファイルサイズ] [幅] [高さ] [カラーモード] をカンマで繋いで出力しています。
出力の形は以下のように、”(ダブルクオーテーション)の中で自由に変更できます。
identify -format "サイズ: %[width]x%[height] pixel / カラー: %[colorspace]" in.png
実行結果 )
サイズ: 4000x4000 pixel / カラー: sRGB
またプロパティには、上記のような括弧を使うタイプの他に %m , %f などアルファベット一文字で記入するタイプがあります。
identify -format "%w,%h,%m" in.png
実行結果 )
4000,4000,PNG
どちらかにしかないプロパティや、取得できる値の細かさが違ったりする場合もありますので、注意が必要です。
以下に代表的なプロパティをまとめました。
取得したい値 | %[AAA] | %A | 備考 |
---|---|---|---|
幅 (pixel) | %[width] | %w | |
高さ(pixel) | %[height] | %h | |
ファイル形式 | — | %m | %[AAA]の形式はなさそうです |
ファイルサイズ(byte) | %[size] | %b | |
X解像度 | %[resolution.x] | %x | ※取得値に違いあり(%xの方が細かい値) |
Y解像度 | %[resolution.y] | %y | ※取得値に違いあり(%yの方が細かい値) |
カラーモード | %[colorspace] | %r | ※取得値に違いあり(%rは画像クラス付) |
その他のプロパティは以下のImagemagick公式を参照してください。
カッコつきと短縮形は混在できますので、取得したい値に沿って使い分けてください。
4.値を利用するプログラム例(PHP)
-identifyを使う用途として、画像情報を出力して終了ということはほぼないですよね。
実際は、システム内で値を利用することがほとんどだと思います。
PHPでImagemagickを利用する場合、下記のようにsystemなど外部コマンドを実行する関数内で使うと思います。
system('identify -format "%w,%h,%m" in.png');
system関数はコマンドを実行、出力して終了なので、-identifyと合わせて使うと、画像情報を出力して終了ということになってしまいます。
ということで、返り値として画像情報を取得するためには、execやshell_execなど、別の外部コマンド実行関数と合わせて使う必要があります。
$v=shell_exec('identify -format "%w,%h,%m" in.png'); var_dump($v);
実行結果 )
string(13) "4000,4000,PNG"
変数内に画像情報を文字列で取得することができました。
これを配列等に持ち替えれば、プログラム内で自由に利用できるかと思います。
以上本日は、-identifyコマンドで画像の情報を取得する方法について解説いたしました。
ではまた。