2021年9月28日火曜日

【Pillow】画像のアルファブレンド(blend、alpha_composit)

 画像処理ライブラリPillowblendalpha_compositeにより2つの画像を画素に設定された透過度をもとに合成するアルファブレンドを行う方法について説明する。

Pillow(PIL) を使うためにはインポートが必要。 PIL.Imageモジュールは通常以下の形式でインポートされる。

from PIL import Image


1. blendによるアルファブレンド

 blend の書式は以下の通り。

PIL.Image.blend(im1, im2, alpha)

im1:1つ目の画像
im2:2つ目の画像。1つ目の画像と同じ色空間とサイズ
alpha:im1の透過度を表し0.0で透過度0%(im1と同じ)、1.0で透過度100%(im2と同じ)
つまりブレンドされた画像out
out = im1 * (1.0 - alpha) + im2 * alpha
と計算される。

 例に用いる画像'thumb.jpg','ramen.jpg'は以下を使用(フリー写真素材ぱくたそより)

'thumb.jpg'



'ramen.jpg'



 2つの画像をalpha=0.5でブレンドする例。im1,im2は同じ透過度でブレンドされる。

from PIL import Image

im1 = Image.open('thumb.jpg')
im2 = Image.open('ramen.jpg')

out = Image.blend(im1, im2, 0.5)

out.save('alpha.png')

実行結果




 alpha=0.2に変更した結果。im1の透過度が0.2、im2の透過度が0.8となりim1が濃くブレンドされる。

from PIL import Image

im1 = Image.open('thumb.jpg')
im2 = Image.open('ramen.jpg')

out = Image.blend(im1, im2, 0.2)

out.save('alpha.png')

実行結果




2. alpha_compositeによるアルファブレンド

 alpha_compositeにより RGBA色空間を持つ同じサイズの2つの画像が、それぞれの画像にあらかじめ設定されたアルファ値に基づいてブレンドされる。
書式は以下の通り。

PIL.Image.alpha_composite(im1, im2)


 元画像がRGBでアルファ値を持たない場合にはAチャンネルを加える必要がある。Aチャンネルの追加にはputalphaを用いる。
書式は以下の通り。引数はalphaのみで画像に付与したいアルファ値(0~255)を与える。元々アルファ値を持つ画像の場合はputalphaで新しいアルファ値に変更される。またグレースケール画像(モードはL)の場合にはアルファチャンネル付きグレースケール画像(モードはLA)に変換される。

Image.putalpha(alpha)


 2つの画像それぞれにアルファ値128を与えてブレンドする例。

from PIL import Image

im1 = Image.open('thumb.jpg')
im1.putalpha(128)

im2 = Image.open('ramen.jpg')
im2.putalpha(128)

out = Image.alpha_composite(im1, im2) 
    
out.save('alpha.png')

実行結果




3. リファレンス

Pillow (PIL Fork) > ImageDraw Module > PIL.Image.blend(im1, im2, alpha)
Pillow (PIL Fork) > ImageDraw Module > PIL.Image.alpha_composite(im1, im2)
Pillow (PIL Fork) > ImageDraw Module > Image.putalpha(alpha)

使用バージョン:Python 3.8.8 / Pillow 8.2.0

0 件のコメント:

コメントを投稿