用 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()