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