PIL圆边并添加边框

KVI*_*ISH 5 python python-imaging-library

我目前正在使用此方法为我的用户圆化图像的边缘:

def _add_corners(self, im, rad=100):
    circle = Image.new('L', (rad * 2, rad * 2), 0)
    draw = ImageDraw.Draw(circle)
    draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)
    alpha = Image.new('L', im.size, "white")
    w, h = im.size
    alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))
    alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h - rad))
    alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w - rad, 0))
    alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w - rad, h - rad))
    im.putalpha(alpha)
    return im
Run Code Online (Sandbox Code Playgroud)

舍入效果非常好,我对此很满意。但是,我还想在边缘的限制内在图像周围绘制边框。我在网上阅读的大部分内容都展示了如何在图像本身上绘制边框(而不是我正在做的圆形边框)。有没有办法做到这一点?我已阅读以下内容:

如何使用 pil 对没有白色背景(透明?)的徽标进行圆角处理?

Python图像库(PIL)绘图--带渐变的圆角矩形

有什么方法可以在Python中为图像制作漂亮的抗锯齿圆角吗?

小智 0

这是一个相当晚的响应,但您基本上可以使用相同的方法两次,一次应用于您的图像,然后再次应用于一个新的、稍大的背景图像。然后,您只需将前景粘贴到背景上即可。我已经更新了您提供的功能,如下所示:

def add_corners(im, rad=50, bg=True, bgCol='white', bgPix=5):
    bg_im = Image.new('RGB', tuple(x+(bgPix*2) for x in im.size), bgCol)
    ims = [im if not bg else im, bg_im]
    circle = Image.new('L', (rad * 2, rad * 2), 0)
    draw = ImageDraw.Draw(circle)
    draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)
    for i in ims:
        alpha = Image.new('L', i.size, 'white')
        w, h = i.size
        alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))
        alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h - rad))
        alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w - rad, 0))
        alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w - rad, h - rad))
        i.putalpha(alpha)
    bg_im.paste(im, (bgPix, bgPix), im)
    return im if not bg else bg_im
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

6320 次

最近记录:

2 年,11 月 前