Ubuntu Weekly Recipe

第102回 ImageMagickでコマンドラインから画像加工

この記事を読むのに必要な時間:およそ 3 分

レベルの調整

明度(Value)のレベルを調整するためのオプションはいくつかありますが,ここでは「-linear-stretch」を紹介します。

-linear-stretchは,GIMPの[色]-[トーンカーブ]ツールを使って,黒と白の基準点を決め,その間を直線で結ぶ操作に相当します図3)。

図3 GIMPの[色]-[トーンカーブ]ツール

図3 GIMPの[色]-[トーンカーブ]ツール

ただし,画像1つ1つごとに,黒と白の基準点を手作業で指定していくことは難しいので,-linear-stretchでは黒と白の基準点をパーセントで指定します。

例えば,100万画素の画像で,白の基準点を1%と指定した場合,ImageMagickは明度の大きい順に画素を数えていきます,そして,100万画素の1%である1万画素目を白の基準点とします。よって,少なくとも1万画素は,真っ白な画素になります。

黒の基準点は変更せずに,明度の上位1%の点を白の基準点にするには,以下のコマンドを実行します。

$ convert P001.jpg -linear-stretch 0x1% converted_P001.jpg

変換画像の確認

ここまで紹介した内容を使って,彩度を20%上げ,明度を調整し,圧縮率を90%で指定して保存してみます図4)。ただし,ここでは変換前と変換後をわかりやすくするため,それぞれを左右に並べるオプションを追加しています。

$ convert P001.jpg \
\( +clone -modulate 100,120 -linear-stretch 0x1% \
-gravity East -crop 50%x100%+0+0 \) \
-composite -quality 90 compare_P001.jpg

図4 左側が変換前の画像,右側がImageMagickを使って変換した後の画像

図4 左側が変換前の画像,右側がImageMagickを使って変換した後の画像

この結果でよければ,以下のコマンドでカレントディレクトリ内のJPEGファイルすべてを変換します。

$ ls *.jpg | xargs -I{} convert {} \
-modulate 100,120 -linear-stretch 0x1% \
-quality 90 -verbose converted_{}

写真の撮影日時の修正

ImageMagickは,様々な機能を持ち,ほとんどの画像操作がImageMagickでできてしまいます。

しかし,他のツールを使った方が効率がよい場合もあります。その例としてExif情報内の撮影日時の変更を取り上げ,「jhead」というツールを紹介します。

インストールは以下のコマンドを実行します。

$ sudo apt-get install jhead

画像のExif情報を取得するには,以下のようにファイル名を渡します。

$ jhead P001.jpg

すると,以下のようにExif情報が表示されます。

File name    : P001.jpg
File size    : 5292795 bytes
File date    : 2008:04:12 01:21:22
Camera make  : CASIO COMPUTER CO.,LTD.
Camera model : EX-V7      
Date/Time    : 2007:08:22 13:14:51
Resolution   : 3072 x 2304
Flash used   : No
Focal length :  6.3mm  (35mm equivalent: 38mm)
Exposure time: 0.0025 s  (1/400)
Aperture     : f/4.6
ISO equiv.   : 64
Whitebalance : Auto
Metering Mode: matrix
Exposure     : program (auto)

撮影時刻を3時間進ませる場合は,「-ta」オプションを使って以下のように実行します。

$ jhead -ta+3:00:00 *.jpg

また,先ほど取得したExif情報のカメラモデルの項目を使って,特定のカメラで撮影された写真にのみ変更を加えられます。「EX-V7」で撮影された写真のみ撮影時刻を5分戻す場合は,以下のように実行します。

$ jhead -model 'EX-V7' -ta-0:05:00 *.jpg

年月日を操作する場合は,単純に365日を加算したりするのではなく注1),基準となる1枚の変更後の撮影年月日と変更前の撮影年月日を引き算の形で表して以下のように指定します。

$ jhead -da2009:12:23-2000:01:01 *.jpg
注1
この方法では,閏日を挟む場合,日付がずれてしまいます。

来週12月30日はお休みです。次回は1月6日に掲載の予定です。

みなさま良いお年を。

著者プロフィール

村田信人(むらたのぶと)

Ubuntu Japanese Teamメンバー。Ubuntuオフラインミーティングに参加するうちにUbuntu Japanese Teamの活動に興味を持ち,2009年8月に加入。

コメント

コメントの記入