PIL を使用して円形の画像サムネイルを生成するにはどうすればよいですか? 円の外側のスペースは透明にする必要があります。
スニペットは非常に高く評価されます。事前に感謝します。
PIL を使用して円形の画像サムネイルを生成するにはどうすればよいですか? 円の外側のスペースは透明にする必要があります。
スニペットは非常に高く評価されます。事前に感謝します。
最も簡単な方法は、マスクを使用することです。任意の形状の白黒マスクを作成します。そしてputalpha
、その形状をアルファレイヤーとして配置するために使用します:
from PIL import Image, ImageOps
mask = Image.open('mask.png').convert('L')
im = Image.open('image.png')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.putalpha(mask)
output.save('output.png')
私が使用したマスクは次のとおりです。
サムネイルのサイズを可変にしたい場合はImageDraw
、マスクを使用して描画できます。
from PIL import Image, ImageOps, ImageDraw
size = (128, 128)
mask = Image.new('L', size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + size, fill=255)
im = Image.open('image.jpg')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.putalpha(mask)
output.save('output.png')
GIF で出力したい場合は、代わりに貼り付け機能を使用する必要がありますputalpha
。
from PIL import Image, ImageOps, ImageDraw
size = (128, 128)
mask = Image.new('L', size, 255)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + size, fill=0)
im = Image.open('image.jpg')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.paste(0, mask=mask)
output.convert('P', palette=Image.ADAPTIVE)
output.save('output.gif', transparency=0)
次の変更を行ったことに注意してください。
注意: このアプローチには大きな問題があります。GIF 画像に黒い部分が含まれている場合は、それらもすべて透明になります。透明度に別の色を選択することで、これを回避できます。これには PNG 形式を使用することを強くお勧めします。しかし、それができない場合は、それが最善の方法です。