🎨

Pillow(PIL)でborder-radius

2022/11/03に公開

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)要素が全て透過な要素として置換えられる。

これで完成。

角が丸められた画像

GitHubで編集を提案

Discussion