Pythonで、丸く切りぬいた画像を生成する方法。
基本的には、元画像を正方形にして、丸でマスクするだけだけど、PIL (Pillow) のImage、ImageDrawとか使うとアンチエイリアスが効かなくて汚くしか切り抜けない。
PIL (Pillow) だと、resize、thumbnailしか、アンチエイリアスとかフィルタの設定ができないみたい。
stackoverflow
解決策は、以下のとおり。
* マスク画像は、事前に8ビットグレイスケールで準備する。(透過で準備したらダメだった。マスク画像を、8ビットのグレイスケール画像にして、putalphaでアルファ値として適用するので、透過画像で準備すると、グレイスケールにする際に画像が荒くなっちゃうみたいでダメだったあ。アルファ値として使うんで、白が見えるとこ、黒が切り抜かれるところになる。)
* 正方形に切りぬいた画像に、putalphaでマスク画像を適用。
from PIL import Image, ImageOps
mask = Image.open("マスク画像のパス")
org = Image.open("元画像のパス")
sq = ImageOps.fit(sq, (400, 400), method = Image.LANCZOS)
sq.putalpha(mask.convert("L"))
sq.save("丸く切りぬいた画像の保存先のパス")
参考にしたページ。
stackoverflow
他にも、Cairo、aggdraw とかの画像ライブラリを使うのもいいみたいだけど、メンテがされてなさそうだから使わなかった。
Quora