Help us understand the problem. What is going on with this article?

Imagemagickの高速化 mprとmpc

More than 5 years have passed since last update.

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
hadashiA
フリーランスプログラマだよ
https://twitter.com/hadashiA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away