Imagemagickのコマンドを高速化する機能として、mprとmpcというものがあります。
mpr (Memory Program Register)
mpr という仕組みを使うと、複数の処理を一つのコマンドにまとめることができます。
before
# hoge という字の画像を生成
$ convert -size 200x200 -background transparent -fill black -gravity Center label:hoge png:- | \
# それをbg.png と合成する
$ convert -composite - bg.png hoge.png
after
$ convert -size 200x200 -background transparent -fill black -gravity Center label:hoge -write mpr:hoge +delete mpr:hoge -composite bg.png hoge.png
mpr:hoge
を出力として指定することで、Imagemagickプロセス内のメモリに hoge
という名前で出力結果が一時的に保存されます。 その後、+delete
で直前までのコマンドライン引数の内容をリセットし、最後に mpr:hoge
を入力にして合成の処理を実行しています。
プロセスが1つになったことで、起動のオーバーヘッドや、入力データをパースする処理が省けるため、パフォーマンスが良くなります。
mpc (Magick Pixel Cache)
mpcは、Imagemagickが画像をパースした後のフォーマットです。 Imagemagickにとっては、汎用の画像フォーマットをパースするよりも、mpc形式を読み込んだ方が高速になります。
あらかじめ合成用の素材をmpcに変換しておくことで、パフォーマンスを改善することができます。
変換は、
$ convert bg.jpg bg.mpc
のように、出力フォーマットをmpcに指定するだけです。
このとき、 .mpc
というファイルと、.cache
という計2つのファイルが作成されます。 hoge.mpc
を入力にするときは、 hoge.cache
が同じディレクトリ内に必要です。
さっきの例の合成も、合成用素材にmpc を指定することができます。
$ convert -size 200x200 -background transparent -fill black -gravity Center label:hoge -write mpr:hoge +delete mpr:hoge -composite bg.mpc hoge.png