以前、Macで画像を回転させたり切り抜いたり画像形式を変えたりする処理を行いました。画像処理は大昔Macの得意分野でしたが、Windows95登場以降はパソコンなら難なくこなせるようになりました。では、ワークステーション(死語)などにも搭載されていたUNIX系OSでは画像処理は何を使っていたのでしょう?いくつかあるうちの1つが今回説明する多分一番有名だと思われるImageMagicです。

・ImageMagick
 https://imagemagick.org

ImageMagickは古くからあり多種多様な画像形式に対応しています。古い形式から新しい形式までとにかくいろいろ対応しているだけでなく、画像の加工や生成までもできてしまいます。ImageMagickは現在でもバージョンアップされています。なお、バージョン7からはコマンド名がmagickに変わっていたりするので、以前のバージョンから移行する場合は注意が必要です。(以前のバージョン6まではconvertやmogrifyという処理に応じたコマンド名)

なお、今回はバージョン6までのコマンド例はラズベリーパイで、バージョン7の場合はmacOSで説明してます。基本的にはインストールしてしまえばWindowsでもMacでもUNIX系OSでも同じように使用できます。なお、ImageMagickは多機能・高機能なのでよく使いそうな機能に絞って説明します。

今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。

ImageMagicのインストール

 ImageMagicは数多くのプラットフォームに対応しています。それぞれに対応したイメージ等をダウンロードしてインストールしてください。ここではラズベリーパイのOSであるRaspberryPi OSの例を示します。なお、MacやUbubtuなどでうまくインストールできない場合はHome brewを使うという方法もあります。特にMacの場合はHome brewを使った方がよいでしょう。

・Home brew
https://brew.sh

RaspberryPi OSの場合はターミナルから以下のコマンドを入れればImageMagicがインストールされます。

sudo apt-get update
sudo apt install imagemagic

無事にインストールできたか確認してみましょう。ターミナルから以下のようにコマンドを入力します。ImageMagickのバージョン等が表示されればOKです。ラズベリーパイにはバージョン6のImageMagickがインストールされているのが分かります。

convert -version

ImageMagickのバージョン7以降の場合は以下のコマンドでバージョンを確認できます。

magick -version

画像形式を変換する

 それでは手始めに画像形式を変換してみましょう。ここではカレントディレクトリにあるJPEG画像をPNG形式に変換します。

 画像形式を変換するにはconvertコマンドを使います。

convert 元のファイル名 変換後のファイル名

 カレントディレクトリにある1.jpgを1.pngに変換するには以下のように指定します。なお、どの画像形式に変換するかは拡張子でも判断されます。もちろんオプションを指定して変換することもできます。

convert 1.jpg 1.png

バージョン7の場合は以下のように指定します。

magick convert 1.jpg 1.png

なお、iPhoneで撮影した写真のHEIC(HEIF)は、古いImageMagickでは処理できません。新しいバージョン7であれば以下のようにすることでHEIC(HEIF)形式からJPEG形式に変換することができます。

magick IMG_5817.HEIC 1.jpg

一括して変換する場合はmogrifyコマンドを使います。以下のようにするとカレントディレクトリ内にあるJPEG画像(拡張子はjpgのみ)をPNG形式に変換します。

mogrify -format png *.jpg

バージョン7の場合は以下のように指定します。

magick mogrify -format png *.jpg

バージョン7であればHEIF形式からWebP形式に変換することもできます。以下のように指定するとカレントディレクトリ内にあるHEIF形式をWebP形式に一括して変換できます。

magick mogrify -format webp *.heic

画像サイズを変更して保存する

 画像形式は手軽に変換できるのが分かりましたので、次に画像サイズを変更した後に保存してみましょう。
画像サイズはオプションで-resizeを指定します。200x100や50%のように指定できます。200x100を指定すると横幅が200ピクセル、縦幅100ピクセルになります。50%を指定すると画像の横幅と縦幅が半分(50%)になります。

 以下の例はカレントディレクトリにある1.jpgを10%のサイズに縮小し1s.jpgというファイル名で保存します。

convert 1.jpg -resize 10% 1s.jpg
  • (元画像)

  • (変換後の画像)

バージョン7の場合は以下のように指定します。

magick convert 1.jpg -resize 10% 1s.jpg

 割合ではなく画像サイズを直接指定する場合は以下のようになります。以下の例では画像を横200、縦100ピクセルに変更します。サイズ指定の後に!(感嘆符)が付いているのがポイントです。これがない場合は縦横比を保ったままリサイズされます。以下の例で!を付けないと縦幅が100ピクセルになり、横幅はそれに合うように自動調整されます。

convert 1.jpg -resize 200x100! 1m.jpg

バージョン7の場合は以下のように指定します。

magick convert 1.jpg -resize 200x100! 1m.jpg

一括して画像サイズを変更するにはconvertの代わりにmogrifyを使います。以下のようにするとカレントディレクトリ内にあるJPEG画像(拡張子がjpgのみ)を横幅200ピクセル、縦幅100ピクセルにリサイズして同じ名前で保存します。(ファイルは上書きされるので、元画像が必要な場合は、どこかにコピーしてから実行してください)

mogrify -resize 200x100! *.jpg

バージョン7の場合は以下のように指定します。

magick mogrify -resize 200x100! *.jpg

その他の画像サイズ指定

 ImageMagickは以下に示す記号や形式を指定できます。サイズ指定の後に記号を付けることで条件付きでリサイズが可能です。ここらへんは簡単な記号や形式で一括変換できますので大変便利です。
 以下にサイズ指定の形式を示します。

-resize ●% 指定した割合でリサイズ。100%なら100%、200%なら2倍、50%なら半分のサイズ
-resize 横幅x縦幅 縦横比を保ったまま横幅か縦幅にフィットしたサイズにする
-resize 横幅x縦幅! 指定した横幅と縦幅にリサイズする
-resize 横幅x 指定した横幅にする。縦幅は縦横比を保ったままリサイズされる
-resize 横幅x! 指定した横幅にする。縦幅は変更されない
-resize x縦幅 指定した縦幅にする。横幅は縦横比を保ったままリサイズされる
-resize x縦幅! 指定した縦幅にする。横幅は変更されない
-resize '横幅x縦幅>' 指定した横幅と縦幅にリサイズする。ただし指定した幅より小さい場合は画像はリサイズされない
-resize '横幅x縦幅 指定した横幅と縦幅にリサイズする。ただし指定した幅より大きい場合は画像はリサイズされない

 上記の指定でリダイレクト記号が含まれているのでシングルクオートで囲まないと期待通りの結果になりません。つまり、カレントディレクトリにあるJPEG画像で128x128ピクセル以上の場合のみリサイズするには以下のように指定します。

・バージョン6まで

mogrify -resize '128x128>' *.jpg

・バージョン7

magick mogrify -resize '128x128>' *.jpg

 ここまではリサイズ処理に-resizeを指定してきましたが、ImageMagickには他にもリサイズを行うためのオプションがあります。多くの場合、-resizeで用に足りると思いますが、そうでない場合は以下のオプションも検討してみるとよいでしょう。

-sample ニアレストネイバー(高速)
-scale 画素混合
-resize バイキュービック
-thumbnail メタデータ削除
-resample dpi調整

 ただ、どのオプションがどのように機能するか?ですが、以下のサイトで日本語で読むことができるよい記事がありましたので参考にするとよいでしょう。

https://qiita.com/yoya/items/b1590de289b623f18639
https://qiita.com/yoya/items/704fdfbd881f166125d8

 次回はImageMagickを使って画像処理を行ってみます。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。