在Python 下使用 pillow 将图象处理为圆角矩形

小虫 · 2018年10月28日 · 2753 次阅读

以下是一个自定义方法,已经作了详细注释。

from PIL import Image, ImageDraw


def circle_corner(img, radii):
    """
    圆角处理
    :param img: 源图象。
    :param radii: 半径,如:30。
    :return: 返回一个圆角处理后的图象。
    """

    # 画圆(用于分离4个角)
    circle = Image.new('L', (radii * 2, radii * 2), 0)  # 创建一个黑色背景的画布
    draw = ImageDraw.Draw(circle)
    draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)  # 画白色圆形

    # 原图
    img = img.convert("RGBA")
    w, h = img.size

    # 画4个角(将整圆分离为4个部分)
    alpha = Image.new('L', img.size, 255)
    alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))  # 左上角
    alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))  # 右上角
    alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))  # 右下角
    alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))  # 左下角
    # alpha.show()

    img.putalpha(alpha)  # 白色区域透明可见,黑色区域不可见
    return img


# 原图
img = Image.open('/Users/chongzi/Downloads/tmp/road.jpg')
img = circle_corner(img, radii=30)
img.show()

原图效果:

处理后效果:

共收到2条回复
fred · 5个月前

加完圆角后边缘模糊有什么方法可以吃力吗

fred · 5个月前

加完圆角后边缘模糊有什么方法可以处理吗

我要评论
登录之后,才能够回复。如果您还没有帐号,请先注册
小甜饼

青年是学习智慧的时期,中年是付诸实践的时期。 —— 卢梭