🎨
Pillow(PIL)でborder-radius
Pillow(PIL) でこんな感じに画像を border-radius したい。
Before | After |
---|---|
コードの全体像
from PIL import Image, ImageDraw
img = Image.open("./lenna.png")
radius = 50
mask = Image.new("L", img.size, 0)
mask_draw = ImageDraw.Draw(mask)
mask_draw.rounded_rectangle((0, 0, img.width, img.height), radius, fill=255)
img.putalpha(mask)
img.show()
やっていること
マスク用の画像を作る
mask = Image.new("L", img.size, 0)
mask_draw = ImageDraw.Draw(mask)
mask_draw.rounded_rectangle((0, 0, img.width, img.height), radius, fill=255)
マスク用の 8bit グレースケール画像を作る。
目的の画像を埋め込む部分が黒(0)、透過させたい部分が白(255)になるように rounded_rectangle
で図形を描く。
マスク画像を対象画像のアルファ要素に貼り付ける
img.putalpha(mask)
対象画像のアルファ要素に先程のマスク画像を貼り付ける。
アルファ値は0で完全な透明になるので、マスク画像の黒(0)要素が全て透過な要素として置換えられる。
これで完成。
Discussion