2012/09/17

Linuxで画像フォーマットを変更するなら mogrify

Macで画像フォーマット(PNG→JPEGなど)の変更をしようと思った場合すごい簡単にできる。
Automatorで予め画像のフォーマット変換のスクリプトが用意されているのでそれを使えばいい。

Windowsの場合は標準機能でどうにかしようとするのはほぼ諦めたほうがいいが、その辺はフリーソフトが潤沢にあるので使いやすそうなのを選べばいい。

さて、Linux。
Automatorのような都合のいいオートメーション化ソフトは用意されていないし、WindowsみたいにGUIライクなフリーソフトも数少ない。
もちろん枚数が少なければGIMPなどの超重量級アプリという手もある。

ただ、その辺Linux。
非常に強力な画像処理ツールの ImageMagickが用意されている。 
Webサービスなどでも使われるくらいメジャー。各種言語から使えるので非常に汎用性が高い。

 yum install ImageMagick ImageMagick ImageMagick-devel

 

が、単に画像フォーマット変換するためにコーディングしたくない><
と思っていたらImageMagickをインストールするとConvertというコマンドが使えるようになります。 

Shell上から簡単に画像フォーマット変換が可能になります。

convert  -quality 80 -format jpg *.bmp

これで配下のビットマップをJPEGに変換できます。qualityの指定が80%(0が高圧縮〜100が無劣化)という感じ。
画像フォーマット変換だけでなく、複数の画像をアニメーションGIFにしたり、透過PNGをつくったり、指定範囲だけを切り抜きしたり、画像をまとめて大きな画像を作ったりとかなりなんでもできる。

 

問題点を指摘するとすれば、ワイルドカードで指定すると指定された分すべてメモリ上に展開しようとするらしく、枚数によっては強制終了しちゃいます。もちろん -limit オプションで使用メモリ量を制限することも可能です。
1枚づつやる場合はBashで書いてあげる必要があります。

Masahiro SAWADA - まとめて画像変換

今回は上記サイトで公開されているシェルスクリプトを参考にさせていただきました。
ありがとうございます。

 

わざわざシェルスクリプトまで書いておきながらわかったのですが、一括して画像のフォーマット変換を行う場合はmogrifyというコマンドを使うと効果的。
このコマンドもImageMagickをインストールすると使えるようになります。

mogrify  -quality 80 -format jpg *.bmp

Convertコマンドのように画像を結合したりできない代わりに、大量の画像に対しても1枚づつ処理を行うことによりメモリを圧迫せず強制終了することなく画像変換が可能です。
汎用的と言えばConvertコマンドですが、便利なものには更に便利なものがあるということで、きちんと調べないと損しちゃいますね。

 

画像のサムネイルを作ったり、用途に合わせて最適化できたりなど、応用のやりがいがありそう。