こうこく
作 ▸
改 ▸

複数の画像をImageMagickで一括リサイズして別名保存する

  • ImageMagick (Windows版) を使います。
  • 一括で加工して別名保存はできないみたいだったので、バッチファイル作りました。

サイトに展示してたドット絵を高解像度ディスプレイに対応させるために、補完無しで整数倍に拡大した画像を用意する必要がありました。

そういう経緯で簡単にできる方法を探してて、ImageMagickを知りました。アニメーションGIFにも対応してたので採用しました。

ImageMagickをインストール

ダウンロードページのWindowsのところから、ImageMagickをダウンロードします。

今回は一番上にあった ImageMagick-7.0.4-6-Q16-x64-dll.exe をダウンロードしてインストールしました。以降で使用する magick コマンドはver.7から追加されたものらしいので、このページはver.7前提です。

インストールは全てデフォルト設定で行いました。が、後述の mogrify コマンドを使いたい場合は、『Select Additional Tasks』で『Install legacy utilities (e.g. convert)』をチェックONにする必要があります。(このページに書いてあることをやるだけならば不要です。)

インストールが終わったら、ダウンロードページの下部に書いてある通りにコマンドプロンプトから以下のコマンドを1行ずつ実行して、エラーが出ないことを確認しました。

magick logo: logo.gif
magick identify logo.gif
magick display logo.gif

私の環境では何も問題ありませんでしたが、エラーが出たら別途 Visual C++ Redistributable Packages for Visual Studio 2013を入れる必要があるそうです。

普通に使う

適当な画像 example.gif を用意してコマンドプロンプトで以下のように実行すると、2倍サイズの画像 example@x2.gif が作成されました。

magick example.gif -sample 200% example@x2.gif

ここでは用途がドット絵の拡大だったので、補完 (フィルタ) なしで画像サイズを変更できる [sample](https://imagemagick.org/script/command-line-options.php#sample) オプションを使いました。補間が必要な場合は [resize](https://imagemagick.org/script/command-line-options.php#resize) オプションを使えばいいみたいです。

一括で別名保存する

たくさんの画像に対して同じことをひとつずつやりたくないので、一括でやる方法を探しました。

ImageMagickには、画像を一括で処理できる mogrify コマンドがあるみたいです。でも mogrify は、加工済みの画像を元の画像に上書き保存してしまいました。

それで少し調べたけど見つからなかったので、フォルダ内の全ファイルを magick で加工して別名保存するバッチファイルを書いてみました。

highreso.bat
@echo off

cd /d %~dp0

for %%a in (%1\*) do call :resize %%a
exit /b

:resize
set filename=%~n1
magick %1 -sample 200%% %~p1%filename%@x2%~x1
exit /b

これを highreso.bat とでもして保存し、パラメータに対象のフォルダのパスを指定して実行します。

highreso.bat C:\path\to\img

するとフォルダ内 (直下) の全画像を200%のサイズに拡大したものを、元のファイル名の末尾に @x2 を付与した名称で別名保存します。

末尾に@x2
末尾に@x2

あんまりバッチファイルを書いたことがないので、書き方については以下の記事を参考にさせていただきました。

[バッチ基礎] 第8回 for – ループ処理 | インフラSEの運用・構築メモ

バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法 - みちしるべ

この記事に何かあればこちらまで (非公開)