如果你使用过PIL的话,还顺便听说过名叫“ImageFilter”的二级模块的话,那你大概能猜出来,PIL库的滤镜通通都在这个二级模块中。
而你如果打开这个二级模块的文件的话,就可以看到里面有很多滤镜,而且这些滤镜都是以class的形式存在的,就像下图:
那么,如果你想用所有的滤镜对同一照片进行处理,又突然懒癌发作,不想一个一个地输滤镜的名称,那你可以考虑一键获取所有滤镜的class,但是问题来了,似乎并没有现成的方法?
不用着急,解决方法是存在的,而且已经内置在python环境中了,使用inspect这个库,就可以让你舒舒服服地把懒癌坚持到底了。就像下面这两行代码:
import inspect
clsmembers=inspect.getmembers(sys.modules["PIL.ImageFilter"],inspect.isclass)
试着输出一下试试,就会发现每个元素都是一个tuple,每个tuple都包含了一个字符串和一个class,直接获取第二个作为class,大功告成!
for filter in clsmembers:
try:
count+=1
im2=origin.filter(filter[1])
im2.save(filepath+"\\finalresult\\{}.jpg".format(count),'jpeg')
except:
pass
代码是如此地奇幻而又充满魔力,简直就和爱情一毛一样!!!