1. 準備
組み合わせる画像をロードする
複数の画像を扱う前に、それらをロードする必要があるよ。PillowはJPEG、PNG、BMP、GIFなどの多くの一般的な画像フォーマットに対応してる。
from PIL import Image
# 画像のロード
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")
ここでは、背景画像と重ねる画像をロードしてるよ。一部のメソッドでは、両方の画像が同じサイズである必要があるから注意してね。
2. 画像の重ね合わせ
メソッド paste()
paste()メソッドを使って、指定した座標に画像を他の画像の上に貼り付けられるよ。このメソッドは、コラージュ効果を作りたいときや、画像を重ねたいときに役立つ。
# 背景サイズに合わせて前景のサイズを変更
foreground = foreground.resize(background.size)
# 背景と前景を重ねる
background.paste(foreground, (50, 50)) # foregroundを座標(50, 50)に挿入
# 結果を保存
background.save("pasted_image.jpg")
ここでforeground画像をbackgroundに(50, 50)から挿入してるよ。もし前景が背景の境界を超えた場合、一部がカットされるんだ。
paste()でマスクを使用する
paste()メソッドは、透明な領域を保持しつつ部分的に画像を重ねることができるマスクもサポートしてるよ。マスクはL(グレースケール)またはRGBAモードである必要がある。
# マスクを作成
mask = Image.open("mask.png").convert("L") # マスクをグレースケールに変換
# マスク付きで画像を挿入
background.paste(foreground, (50, 50), mask=mask)
background.save("pasted_with_mask.jpg")
mask.pngマスクはforeground画像の見える部分を決めて、画像をきれいに重ねるのに役立つんだ。
3. 画像のブレンド
メソッド blend()
blend()メソッドを使うと、設定した透明度で2つの画像をブレンドできるよ。このメソッドは、新しい画像オブジェクトを作成して、元の2つの画像の混合結果を表示する。blend()を使うには、両方の画像が同じサイズである必要があるよ。
画像の簡単なブレンド
# 両方の画像を同じサイズにリサイズ
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
# 透明度パラメータを使って画像をブレンド
blended_image = Image.blend(background, foreground, alpha=0.5)
# 結果を保存
blended_image.save("blended_image.jpg")
alphaパラメータはforeground画像の透明度を設定するよ。例えば、alpha = 0.5なら画像が半々にブレンドされるんだ。alpha = 0.0ならforegroundは完全に透明(背景のみ可視)、alpha = 1.0なら背景が完全に透明(前景のみ可視)になるよ。
4. マスクを使用したコンポジション
メソッド composite()
composite()メソッドを使うと、マスクを使用して2つの画像を組み合わせ、どの部分がどの画像から見えるかを指定できる。複雑なコンポジションや正確な画像の重ね合わせを作成するのに便利なメソッドだよ。
composite()を使った画像の組み合わせの例
# 画像とマスクがすべて同じサイズであることを確認
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
mask = mask.resize((500, 500))
# マスクを使ったコンポジションの作成
composited_image = Image.composite(foreground, background, mask)
# 画像を保存
composited_image.save("composited_image.jpg")
マスクによって、foregroundとbackgroundのどの部分が最終画像に表示されるかが決まるよ。マスクの白い部分がforegroundを、黒い部分がbackgroundを見せる。
5. サンプル
paste(), blend(), composite()メソッドを組み合わせた例
これらのメソッドを組み合わせて、さらに複雑なコンポジションを作成してみよう。例えば、背景、半透明画像、マスクがあるとするね。
from PIL import Image
# 画像をロード
background = Image.open("background.jpg").resize((500, 500))
foreground = Image.open("foreground.png").resize((500, 500))
mask = Image.open("mask.png").convert("L").resize((500, 500))
# 1. 背景と前景を半透明でブレンド
blended_image = Image.blend(background, foreground, alpha=0.3)
# 2. 最終画像にマスクを使って重ねる
final_composite = Image.composite(foreground, blended_image, mask)
# 最終結果を保存
final_composite.save("final_composition.jpg")
この例では、blend()とcomposite()を順番に適用して、多層コンポジションを作成する方法を示しているよ。
画像合成メソッドの実用的な活用例
- コラージュ作成:
paste()メソッドで、複数の画像を1つのキャンバスに配置してコラージュやモザイクを作れる。 - 重ね効果と透明度:
blend()メソッドを使うと、画像間のスムーズな移行や効果を簡単に生成できる。 - マスクを使ったコンポジション:
composite()メソッドで、どの部分が表示されるかを正確に制御して、複雑なコンポジションを作れる。
メソッドの比較
| メソッド | 説明 | 用途 |
|---|---|---|
paste() |
1つの画像を別の画像の上に重ねる | コラージュ、画像の配置 |
blend() |
指定した透明度で2つの画像をブレンドする | スムーズな移行や重ね効果 |
composite() |
マスクを使って2つの画像を合成する | 複雑なコンポジションや正確な重ね合わせ |
GO TO FULL VERSION