ImageMagickレシピ
画像フォーマットを変換する
拡張子で自動的にフォーマットを判断するので、単純な変換なら入力と出力を並べるだけで良い。
code:bat
magick input.bmp output.jpg
品質について
JPEG/MPEGの場合
-quality <値>: 保存品質の指定(最低1~最高100)
デフォルトでは、判断できる場合は入力画像の推定品質を使用し、それ以外の場合は 92 を使用します。
PNG/MNGの場合
-quality <値>: 2桁の数値。10の位がzlib圧縮レベル、1の位がフィルタータイプ。詳細 デフォルトの PNG の品質は 75 です。
画像をリサイズする
code:dos
magick input.jpg -resize '200%' output.png //<-- 2倍に拡大
magick input.jpg -resize '100x200' output.png //<-- 100x200に収まるようにアス比固定でリサイズ
magick input.jpg -resize '100x200^' output.png //<-- 100x200を満たすようにアス比固定でリサイズ
magick input.jpg -resize '200x50%' output.png //<-- %とピクセルの混在
magick input.jpg -resize '100x200!' output.png //<-- アス比無視で伸長
<s>%: s%に拡大/縮小
<w>: 横wピクセルになるようにアスペクト比を保ったままリサイズ
x<h>: 縦hピクセルになるようにアスペクト比を保ったままリサイズ
<w>x<h>: 横wピクセル、縦hピクセルに収まるようにアスペクト比を保ったままリサイズし、余るエリアに黒帯を追加
<w>x<h>^: 横wピクセル、縦hピクセルを満たすようにアスペクト比を保ったままリサイズし、収まらないエリアをカット
<w>x<h>!: アスペクト比を無視して横wピクセル、縦hピクセルに伸長
<w>:<h>: w:hのアスペクト比になるように伸長
<w>:<h>^: w:hのアスペクト比に収まらないエリアをカット
<w>:<h>#: w:hのアスペクト比に余るエリアに黒帯を追加
一括処理とワイルドカード指定について
一括処理をする
ワイルドカード(*など)は入力ファイルに対して使用できるが、出力ファイルには使用できないようだ。以下のコマンドはエラーとなる。
code:dos
magick *.jpg *.png //<-- Error
方法1:連番で出力する
ImageMagickが用意している連番機能を利用する。以下のコマンドを実行すると…
code:dos
magick *.jpg out.png
カレントフォルダ内のjpgファイルが「out-1.png, out-2.png, out-3.png」…という連番のファイル名で出力される。入力ファイルパスの文字列ソート順に連番になるっぽいが(未確認)、どのファイルがどの出力結果になったかに執着しない場合、これで充分なこともある。
方法2:ファイル名を変数として取り出す
-set <パラメータ名> <書式文字列>: 入力ファイルから書式文字列の内容を取得しパラメータにセットする
パラメータ名にはcommentなどがあるが、特別にfilename:で始まるパラメータ名は出力ファイル名として利用できる。
書式文字列の例
%f: ファイル名(拡張子含む)
%t: 拡張子を除いたファイル名 %[basename]と同じ
%e: 拡張子 %[extension]と同じ
%d: フォルダパス %[directory]と同じ
%w,%h: 画像の縦,横のピクセル数 %[width],%[height]と同じ
%C: 画像フォーマット(圧縮形式)例:"JPEG" %[compression]と同じ
出力ファイル名には"%[filename:変数名]"の形で利用できる。
code:bat
方法3:ワイルドカードを使わず一枚ごとに処理する
例えばドラッグ&ドロップで画像パスを受け取りたい場合、ワイルドカートではなく画像フルパスがオプションに列挙された状態で渡される。よって以下のようにオプションの数だけコマンドを呼び出すバッチを組めば、バッチに放り込まれた複数のファイルを順次JPEGに変換処理する。
code:bat
@echo off
set MAGICK_PATH="C:\Program Files\ImageMagick\magick.exe"
:LOOPSTART
if "%~1" == "" goto LOOPEND
for %%i in (%1) do (
%MAGICK_PATH% %%i %%~dpni%.jpg
)
shift
goto LOOPSTART
:LOOPEND
ワイルドカードで複数の画像をまとめる
ワイルドカードを利用して複数の画像を「まとめる」用途もある。たとえば以下のようなコマンドは、フォルダ内のjpg画像が1枚のアニメーションGIFとして出力される。
code:bat
magick *.jpg anime.gif