从一篇文章中看到,PIL 1.1.5 已经内置了高斯模糊,但是并没有在文档中提及,而且PIL的高斯模糊中 radius 是硬编码, 虽然构造方法中有传入 radius 参数,但压根就没有用到 (看这里),所以需要自己进行改造,当然,知道了原因, 修改起来自然非常简单了。
结合帖子中的需求,对局部进行高斯模糊,所以还需要结合使用 crop 和 paste 方法实现局部使用滤镜。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#-*- coding: utf-8 -*- from PIL import Image, ImageFilter class MyGaussianBlur(ImageFilter. Filter ): name = "GaussianBlur" def __init__( self , radius = 2 , bounds = None ): self .radius = radius self .bounds = bounds def filter ( self , image): if self .bounds: clips = image.crop( self .bounds).gaussian_blur( self .radius) image.paste(clips, self .bounds) return image else : return image.gaussian_blur( self .radius) bounds = ( 150 , 130 , 280 , 230 ) image = Image. open ( 'source.jpg' ) image = image. filter (MyGaussianBlur(radius = 29 , bounds = bounds)) image.show() |
可以看下效果: