用 Pillow 画一个倒饼图
Draw an inverted pie slice with Pillow
正如标题所说。如何使用 Pillow in Python 绘制下图的白色部分?假设背景可以是任何东西,并且在我编写程序时不知道(但可能不是统一的黑色,也许根本不统一)。
ImageDraw
的文档确实有 pieslice
函数,它与我想要的完全相反。 ImagePath
的文档根本没有提到弧。
使用方法Image.composite
合成两张图片,一张是你的源图,另一张画的是倒饼图,只有白色区域alpha=1,其他区域alpha=0。
from PIL import Image, ImageDraw
def pieslice(im, w1, w2, fill="#ffffffff"):
# Create a all transparent image
im2 = Image.new('RGBA', (w1, w1), color="#00000000")
draw = ImageDraw.Draw(im2, mode="RGBA")
d = (w1 - w2) // 2
# Draw a nontransparent box
draw.rectangle([(d, d), (w2 + d - 1, w2 + d - 1)], fill=fill)
# Draw a transparent pie slice
draw.pieslice([(d, d), (2 * w2 + d - 1, 2 * w2 + d - 1)], 180, 270, fill="#00000000")
# Get alpha layer as mask reference in method composite
alpha = im2.getchannel("A")
new_im = Image.composite(im2, im, alpha)
return new_im
w1, w2 = 200, 180
# Can use any existing square image
im = Image.new('RGBA', (w1, w1), color="#000000ff")
new_im = pieslice(im, w1, w2)
new_im.show()
正如标题所说。如何使用 Pillow in Python 绘制下图的白色部分?假设背景可以是任何东西,并且在我编写程序时不知道(但可能不是统一的黑色,也许根本不统一)。
ImageDraw
的文档确实有 pieslice
函数,它与我想要的完全相反。 ImagePath
的文档根本没有提到弧。
使用方法Image.composite
合成两张图片,一张是你的源图,另一张画的是倒饼图,只有白色区域alpha=1,其他区域alpha=0。
from PIL import Image, ImageDraw
def pieslice(im, w1, w2, fill="#ffffffff"):
# Create a all transparent image
im2 = Image.new('RGBA', (w1, w1), color="#00000000")
draw = ImageDraw.Draw(im2, mode="RGBA")
d = (w1 - w2) // 2
# Draw a nontransparent box
draw.rectangle([(d, d), (w2 + d - 1, w2 + d - 1)], fill=fill)
# Draw a transparent pie slice
draw.pieslice([(d, d), (2 * w2 + d - 1, 2 * w2 + d - 1)], 180, 270, fill="#00000000")
# Get alpha layer as mask reference in method composite
alpha = im2.getchannel("A")
new_im = Image.composite(im2, im, alpha)
return new_im
w1, w2 = 200, 180
# Can use any existing square image
im = Image.new('RGBA', (w1, w1), color="#000000ff")
new_im = pieslice(im, w1, w2)
new_im.show()