一行代码获取PIL的所有滤镜的class对象

如果你使用过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

代码是如此地奇幻而又充满魔力,简直就和爱情一毛一样!!!

猜你喜欢

转载自blog.csdn.net/esa72ya/article/details/88576488