コマンドラインから画像形式を変換する

More than 1 year has passed since last update.

最初に結論

ImageMagickに入ってる convert コマンドを使ふ。

以下のコマンドを実行すると、PNGから可能な限り劣化を最小限に変換できる。 Windows可

convert hogehoge.png -quality 100 hogehoge.jpg

画像形式について

画像形式にはJPEGやPNG、GIF、それとWindows bitmap(BMP)なんかがありますね。いや、ほかにもたくさんたくさんあるんですけど、Webで汎用的かつ一般に流通してるのは99.9%これですね。

最近のアプリケーションはたいてい賢いので、これらの形式ならどれでも大差なく扱ってくれるのですが、それでもどれか一つの形式に統一しなければいけない、あるいはしておきたい場面はあるものです。

ちょっと考へてみたところでは、同人ゲーム制作なんかではありがちかもしれないですね。僕はやったことないですけど。

んで、上に挙げた形式の中でJPEGだけは lossy (データを間引くことでサイズを縮める、つまりファイルが劣化する。非可逆)なファイル形式です。JPEGに変換するだけで、確実にデータが損失します。ところが どうしてもJPEGにしたい といふことはあります。 僕にはあるんです

そんなときには妥協して、PNGなどからJPEGの圧縮率100に変換することにします。圧縮率100とは、JPEGの最も高画質な状態です(が、通常はそれでも僅かに劣化することに注意する必要があります)。

で、圧縮率100のJPEGに変換してやるにはGIMPなどを使ってもできるんですが、起動がめんどくさいのと、マウス操作必須なのでいろいろだるいです(数年前はこれでやってました…)。そこで、コマンドラインから ImageMagick を使ひませう。

ちなみにGIF形式は仕様上256色までしか扱ふことができないので、単純なアイコンなどには向きますが、写真や鮮やかな色彩のイラストなどでは減色の必要があり、やはり画質の劣化、データの損失が発生します。

ImageMagickの導入

Windowsのひとは ImageMagick: Install from Binary Distribution から "Win32 dynamic at 16 bits-per-pixel" ってやつを選んでインストール。 (なんでこんなに差分があるのよ、って理由はリンク先に英語で書いてあるんですが、精度の問題です。ふつうはこのバージョン以外を選ぶ理由はない)

DebianとかUbuntuを使ってたら sudo apt-get install imagemagick とかやったら入る気がします。Mac OS XならHomeBrewでもMacPortsでも入るんじゃないですかね。入ったはずです。タブンネ。

画像形式を変換する

やり方は冒頭に書いた通り なのですが、これでは説明不足なので補足します。ImageMagickはとっても賢い子なので、拡張子から空気を読んで、よしなにファイル形式を選んでくれます。

-quality 100 と指定する必要があるのは(ここまで紹介してきた形式では)JPEGだけです。つまり、GIFからPNGに変換するには次のやうにすれば良いです。

convert hogehoge.gif hogehoge.png

あと、 -quality 100 の指定なしにJPEGに変換しようとすると、ファイルサイズは縮みますが

PNGからJPEGに決め打ちで変換したい

僕の使ってる用途(CDのアルバムアートを合法的に蒐集して音楽ライブラリに取り込む)だと、PNGで存在する画像をJPEGにしたい! って感じなので、わざわざこんなコマンドを打ち込むのはめんどくさいですね。

ってわけで、バッチファイルにします。ファイル名は p2j.bat といふ名前にして、 Path の通ったフォルダに保存します。よくわかんないならメモ帳か何かでデスクトップに保存してから、マウスで C:\Windows とかに抛り込むと良いんじゃないですかね。きっと。

p2j.bat
REM p2j: PNG-to-JPEG convert
REM usage:
REM     p2j hogehoge
REM hogehoge.png -> hogehoge.jpg
convert "%~pn1.png" -quality 100 "%~pn1.jpg"

変換したい対象の画像ファイルが folder.png で、これをJPEGに変換したいとします。そのファイルのあるフォルダをエクスプローラで開いて、アドレスバーに p2j folder と打ち込みます。すると、 folder.jpg ができあがります。

えっ、そんなのめんどくさい? 覚えられない? うるせえ。 [png jpeg 右クリック 変換] とかで検索して出てきたツールでも入れてりゃ良いんじゃないんですか? クォリティも使ひ方も安全性も面倒見切れませんよ><

ちなみにちなみに

-compress LossLess を指定してやればロスレス形式のJPEGに変換できる… のですが、これは互換性の問題で非推奨です(Windows7では表示できましたが、どのJPEGライブラリでもデコードできるとは限りません)。

僕は「一枚単位で画像変換するくらゐでけちけちする必要ないよね!」といふ 富豪的プログラミングな発想Q16 を勧めるのですが、大量の画像を捌くから高速な方が良い! なんて場合は Q8 版を使って全然大丈夫なはずです。それから、ImageMagick高速化まとめ #ImageMagick #Linux - Qiitaによれば、自前でビルドできるなら --disable-openmp オプションを付けてやると良いみたいですね。僕は知りません。

あと、ImageMagickには mogrify といふコマンドがあって、これを使っても似たやうなことができ、なほかつ一括処理に向いてゐます。が、こちらを使ふと基本的にファイルは上書きしてしまふことになるので、僕は使ひません。PNGからJPEGへの変換は必ずlossyなので、元のファイルは残しておきたいからです。

参考文献

……あんまり読んでないです><

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.