如何用Python Pillow实现图片中圆角矩形区域的模糊处理?
实现图片中圆角矩形区域的模糊效果
没问题,我来帮你把两段代码结合起来,实现你想要的圆角矩形区域模糊效果。核心思路是用圆角矩形遮罩来限制模糊区域的形状,这样模糊后的内容只会在圆角范围内显示,不会出现生硬的直角边缘。
下面是完整的可运行代码,我已经把你的两段代码整合并做了适配:
from PIL import Image, ImageDraw, ImageFilter def round_corner(radius): corner = Image.new('RGBA', (radius, radius), (0, 0, 0, 0)) draw = ImageDraw.Draw(corner) # 绘制1/4圆形的圆角(白色填充,作为遮罩的有效区域) draw.pieslice((0, 0, radius * 2, radius * 2), 180, 270, fill=(255, 255, 255, 255)) return corner def round_rectangle(rectangle, radius): corner = round_corner(radius) # 粘贴四个圆角到矩形的四个角落 rectangle.paste(corner, (0, 0)) rectangle.paste(corner.rotate(90), (0, rectangle.size[1] - radius)) rectangle.paste(corner.rotate(180), (rectangle.size[0] - radius, rectangle.size[1] - radius)) rectangle.paste(corner.rotate(270), (rectangle.size[0] - radius, 0)) # 填充中间的矩形区域,确保整个圆角矩形都是遮罩有效区域 draw = ImageDraw.Draw(rectangle) draw.rectangle([radius, 0, rectangle.size[0]-radius, rectangle.size[1]], fill=(255,255,255,255)) draw.rectangle([0, radius, rectangle.size[0], rectangle.size[1]-radius], fill=(255,255,255,255)) return rectangle # 主逻辑 if __name__ == "__main__": # 打开原图 img = Image.open('assets/images/image.png') # 定义圆角矩形区域参数 x, y = 300, 1600 # 区域左上角坐标 x2, y2 = 1000, 2600 # 区域右下角坐标 radius = 50 # 圆角半径,可根据需求调整大小 # 裁剪目标区域并进行高斯模糊 cropped_area = (x, y, x2, y2) cropped_img = img.crop(cropped_area) blurred_img = cropped_img.filter(ImageFilter.GaussianBlur(20)) # 创建与裁剪区域同尺寸的圆角遮罩 mask = Image.new('RGBA', (x2 - x, y2 - y), (0, 0, 0, 0)) mask = round_rectangle(mask, radius) # 将模糊后的图像通过遮罩粘贴回原图(仅遮罩不透明区域会被模糊覆盖) img.paste(blurred_img, (x, y), mask=mask) # 保存并查看结果 img.save('assets/images/new.png') img.show()
关键调整说明:
- 我给
round_corner的扇形加上了白色填充,让遮罩的圆角部分成为有效覆盖区域;同时在round_rectangle里补充了中间矩形区域的填充,确保整个圆角矩形范围内都是遮罩的有效区域。 - 粘贴模糊图像时,通过
mask参数指定圆角遮罩,这样只有遮罩不透明的部分会被模糊图像覆盖,透明部分则保留原图内容,完美实现圆角区域的模糊效果。 - 你可以通过调整
radius值来改变圆角的大小,数值越大,圆角越圆润。
内容的提问来源于stack exchange,提问作者Lucas




