2022年4月22日金曜日

【Pillow】linear_gradient, radial_gradientによるグラデーション画像生成

 画像処理ライブラリPillowのImage.linear_gradientにより上から下に向けて黒から白に変化するグラデーション画像が生成される。また、Image.radial_gradientにより中心から外に向けて同心円状に黒から白に変化するグラデーション画像が生成される。

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

from PIL import Image



1. Image.linear_gradient

 Image.linear_gradientの書式は以下。引数はmodeのみで、'L'(8ビット1チャンネル)を指定する。

PIL.Image.linear_gradient(mode)

 生成される画像のサイズは256x256。y=0が黒(画素値0)、y=255が白(画素値255)になる。

from PIL import Image

im = Image.linear_gradient('L')

im.save('linear_gradient.jpg')



 生成されたグラデーション画像を、'RGB', 'RGBA', 'HSV'等の多チャンネルモードの1チャンネルとして使うことで様々なグラデーション画像を作成できる。またImage.compositeのマスク画像として用いることで、2つの画像をグラデーションを付けて合成できる。

 'HSV'モードのH値(色相)にグラデーション画像を反時計回りに90°回した画像(左が黒、右が白)を割り当て、S値(彩度)にグラデーション画像を180°回した画像(下が黒、上が白)を割り当て色相と彩度のマップを作成する例。'HSV'モードのままでは出力できないので'RGB'モードに変換してファイルに保存する。

from PIL import Image

grad = Image.linear_gradient('L')
v = Image.new('L', (256, 256), 255)

im = Image.merge('HSV', [grad.transpose(Image.ROTATE_90), 
                         grad.transpose(Image.ROTATE_180), 
                         v])
rgb = im.convert('RGB')

rgb.save('hsmap.jpg')




2. Image.radial_gradient

 Image.radial_gradientの書式は以下。Image.linear_gradient同様に引数はmodeのみで、'L'(8ビット1チャンネル)を指定する。

PIL.Image.radial_gradient(mode)

 生成される画像のサイズは256x256。中央が黒(画素値0)、四隅が白(画素値255)の同心円状のグラデーション画像になる。

from PIL import Image

im = Image.radial_gradient('L')

im.save('radial_gradient.jpg')



 グラデーション画像をマスクにして2つの画像をImage.compositeで合成する例。マスクが白い箇所では1つ目の画像、マスクが黒い個所では2つ目の画像が描画され、マスクが中間の画素値の場合はそれに応じて2つの画像がブレンドされる。

 使用する画像 'redsty.jpg', 'kuchikomi.jpg'(幅256ピクセルx高さ256ピクセル)は以下(フリー写真素材ぱくたそより)

'redsty.jpg'





'kuchikomi.jpg'





from PIL import Image

image1 = Image.open('redsty.jpg')
image2 = Image.open('kuchikomi.jpg')
mask = Image.radial_gradient('L')

out = Image.composite(image1, image2, mask)
out.save('composite.jpg')




3. リファレンス

Pillow (PIL Fork) > Image Module > PIL.Image.linear_gradient(mode)
Pillow (PIL Fork) > Image Module > PIL.Image.radial_gradient(mode)

使用バージョン:Python 3.8.12 / Pillow 9.0.0

0 件のコメント:

コメントを投稿