画像の結合1(重ね合わせ)

-gravity -compose -composite -geometry

イメージマジック

次にimagemagickを使って、2つの画像を重ね合わせ1枚の画像を生成する方法をご説明します。

1. compositeを使用した合成

composite    -gravity  (position)    -compose  (operator)    <画像名(上)>    
<画像名(下)>    <生成する画像名>

例)composite -gravity southeast -compose over before.png before2.jpg after.jpg

▼実行結果
画像の合成

imagemagickでは、画像の合成専用のコマンドとして、compositeというコマンドが用意されています。
compositeの構文では、1.上に重ねる画像 – 2.下に重ねる画像 – 3.合成される画像名 の順に記載します。

画像を合成する際には、-gravityで合成の際の基準位置を指定します。
省略することも可能で、省略した場合はnorthwest(左上)が基準となります。
-gravityについての詳細は、よく使われるオプションをご参照ください。

次に-composeで画像の重ね方を指定します。
-composeの指定を変えることで、様々な重ね方が実現でき、多彩な画像生成が可能となります。
詳しくは、当ページ3項にて説明いたします。
また-composeも省略することが可能で、初期値は上記例のような単純な重ね合わせ( over )となります。

2. convertを使用した合成

上記compositeを使った画像合成は、[追記] convertとcompositeの違い ホントのところ で紹介しましたように、実はconvertを使っても普通にできます。

convert    <画像名(下)>    <画像名(上)>    -gravity  (position)    -compose  (operator)    
-composite    <生成する画像名>

例)convert before2.jpg before.png -gravity southeast -compose over -composite after.jpg

▼実行結果
画像の合成2

convertで画像合成する際には、-compositeというオプションを使用します。
最大の注意ポイントは、compositeとは異なり先に記載した画像が下に、後に記載した画像が上に来ることです。
また、-gravity-composeなどの重ね方を指定するオプションは、-compositeより前に記入する必要があります。

3. composeの指定による重ね方の違い

ここでは、-composeの指定方法による生成結果の違いを色々と試してみたいと思います。
なお、-composeで指定できるメソッドの種類には、重ねあわせた画像を切り抜くことができるもの等も含まれるのですが、画像の切り抜きについては、別の機会にご紹介したいと思いますので、ここでは割愛します。

▼実行コマンド
convert before.jpg before2.jpg -gravity center -compose (operator) -composite after.jpg

画像の合成3

上記のように2枚の画像を用意し、コマンドの(operator)の部分だけ内容を変えて実行してみます。

▼実行結果
画像の合成例over,screen,multiply

画像の合成例plus,add,minus

画像の合成例subtract,difference,exclusion

画像の合成例darken,lighten

画像の合成例linear-dodge,linear-burn,color-dodge

画像の合成例color-burn,overlay,hard-light

画像の合成例linear-light,soft-light,pegtop-light

画像の合成例vivid-light,pin-light

上記のような結果になりました。
Photoshopなどで聞き覚えのある名称も幾つかあると思います。
そういった画像編集ソフトをわざわざ使用することなく、コマンドを書くだけでこういった多彩な合成画像が作成できるのは、Imagemagickの魅力の一つではないかと思います。
-composeで使用できる基本的なメソッド(切り抜き系のぞく)は、ここで紹介したもので全てです。
ただ、より応用的な特殊メソッドも存在しますので、もっと知りたい方は、以下のリンクからマニュアルをご参照ください。

-composeで使用できるメソッド一覧(英語)

4. 位置を指定した合成

今までご紹介した合成では、-gravityで大まかな合成位置を指定しましたが、実際のWEBサービスなどでは、詳細な位置を指定しての合成の方が使用頻度が高いと思います。
そういった位置を指定して行う合成を最後にご紹介します。

composite    -gravity  (position)    -geometry  +(X)  +(Y)    -compose  (operator)    
<画像名(上)>    <画像名(下)>    <生成する画像名>

例)composite -gravity northwest -geometry +40+20 -compose over before.png before2.jpg after.jpg

または

convert    <画像名(下)>    <画像名(上)>    -gravity  (position)    -geometry  +(X)  +(Y)    
-compose  (operator)    -composite    <生成する画像名>

例)convert before2.jpg before.png -gravity northwest -geometry +40+20 -compose over -composite after.jpg

▼実行結果
画像の合成4

compositeconvert、それぞれのコマンドでの構文が上記になります。
上に重ねる画像の位置を変更したい場合には、先に-gravityで基準点を決めた後、-geometryでX方向の移動距離、Y方向の移動距離を指定します。

-geometryは、後に続く値によって-resizeのように画像サイズを変更することもできるオプションですが、 + に続けて値を指定することで、合成する画像の位置を移動することができます。
上記例では、northwest (左上)を基準として、そこからX方向に40pixel,Y方向に20pixel画像を移動させて合成しています。
-geometryの値は、 + だけではなく、 の値を指定することにより、逆方向へ画像を移動させることもできます。

最後までお読みいただきありがとうございます。お役に立てましたなら嬉しいです。