人生不易且无趣,一起找点乐子吧。欢迎评论,和文章无关的也可以。
咳咳(清下嗓子,准备发话),自娱自乐型人格分裂患者。haaa。
前面我们简单看了pillow的基础Image类。现在我们成功的过度了,进入下个地图,刷怪,升级。反正都是一起学习嘛,我能力就这么点,我是不行了,您凑活吃。
您可能需要一张床,一面墙,一个冰箱。哈,扯回来,进入主题。
这次我们来看ImageChops类,chops,颌,颚,排;的意思。我也不晓得,为啥要起介个名字。英语水平差,领会不到其中的含义。但还好,怪丑不丑,不影响操作,该打还打。
(
后记:
)
为了便于演示,先铺垫一下。
首先是用到的图片素材:
第二张图不那么的和谐,无妨无妨,别问我为啥总是这几张图。因为......我重情。我把好看的图片都测试完了,你们玩的时候就没新意了,ok?(为自己的懒惰找借口完毕)
第二项,我写个main函数,然后调用一个个函数,来简单说明这个类吧。
if __name__ == '__main__':
im1 = Image.open('1.jpg')
im2 = Image.open('3.jpg')
add(im2, im1)#这里调用函数
im1.close()
im2.close()
铺垫完成,先说下这个类的核心思想,这个类对图片进行了一些运算操作,嗯,怎么理解呢,我是这样认为的。我们知道图片由一个个像素点构成,每个像素点又都有像素值,我们一个个像素点去处理,修改他们的像素值,最后再保存处理完的图片,just so so。还有一点,此类方法的处理对象一般为im.mode是L或者RGB的图片,其他类型可能出错。
每个方法的后面我会写出具体的运算,当然这些,官网上也都有,大家可以自行去查看。
此类会对你的视觉造成极大的震撼,色盲,色弱,色狼,心脏病患者避让。(好像除了最后一种病人,其他病状都对视觉刺激免疫啊......)
ImageChops.add(im1,im2,scale=.0,offset=0),加运算
def add(im1,im2):
im3 = ImageChops.add(im1,im2,scale=2.0,offset=0)#scale=1.0 offset=0
im3.save('add.jpg')
im3.close()
此方法有四个参数,前两个无需多谈,两个待处理Image对象,scale,等级,规模。offset,抵消偏移量。不扯这些名词了。
其实做的就是这个运算:
out = ((image1 + image2) / scale + offset)
这里的scale默认是1.0,offset是零。我分别用scale为1.0和2.0做了测试,看下效果:
(我觉得好看,你觉得呢?嗯,真香~~)
ImageChops.add_modulo(im1, im2)
还有个与之类似的加运算:
out = ((image1 + image2) % MAX),max是最大255。
def add_modulo(im1, im2):
im3 = ImageChops.add_modulo(im1, im2)
im3.save('add_modulo.jpg')
im3.close()
就像开头说的这个类就是对像素值做了运算操作,其他的方法,我就直接写完代码,就展示结果了,必要说的地方再谈下。
看结果:
这个比较炫酷是吧。(蓝色描边,skr~~ skr~~~)
ImageChops.darker(im1, im2)
这个方法更酷,我是说名字。我起名为暗黑者,算了不胡扯了,这个方法原理上很简单,他是将两张图片一个一个像素点比较,留下那个像素深度大的点,最后产生一个新的图片。
def darker(im1, im2):#一个个像素点去比较 返回深度高的点
im3 = ImageChops.darker(im1, im2)
im3.save('darker.jpg')
im3.close()
看结果:
可怕。
ImageChops.lighter(im1, im2)
相对应的,“光明者”!就是和darker相对而已,两两比较,留下深度值小的。
def lighter(im1, im2):
im3 = ImageChops.lighter(im1, im2)
im3.save('lighter.jpg')
im3.close()
看结果:
淡淡芒果清香味。(这都是说了个啥!!!)
ImageChops.difference(im1, im2)
所做运算:
out = abs(image1 - image2)
两像素点的绝对差值。
def difference(im1, im2):
im3 = ImageChops.difference(im1, im2)
im3.save('difference.jpg')
im3.close()
看结果:
恐怖悬疑吧这是。(烟火里的尘埃)
ImageChops.invert(im1)
invert,反。很好理解,其实就是取反了。(以下内容可能为胡扯,请将神兽“理性”召出,自行辨别真伪)我们知道,光视觉三原色(red,green,blue)和水彩染料的三原色(red,yellow,blue)是不同的。但是都有个补色的存在,比如最常知道的黑白等。
这里的取反,也能说成是颜色的取补吧,自行理解哈。(你的神兽说什么?别听他瞎BB?But I can.没人废话,没多复杂。【蹭热度】)
def invert(im1):
im3 = ImageChops.invert(im1)
im3.save('inert.jpg')
im3.close()
看结果:
灵异事件!(好喜欢这张图~~~)
你知道熊猫黑白颠倒是啥样子吗?
差不多就下面这个样子:
emmmmmmm
ImageChops.logical_or(im1,im2)
逻辑或运算:
out = ((image1 or image2) % MAX)
我这里没办法做测试了,大家去找图片吧,我这几张图片不符合处理的类型
还有个与之对应的逻辑与运算。
ImageChops.logical_and(im1,im2),一样的。
ImageChops.multiply(im1,im2)
这个应该就直接看懂了,乘法:
out = image1 * image2 / MAX
def multiply(im1, im2):
im3 = ImageChops.multiply(im1,im2)
im3.save('multiply.jpg')
im3.close()
看效果:
渐渐有了抵抗力。(还记得我说有抵抗力的人群都是什么病吗。【手动笑脸】)
ImageChops.offset(im, x, y)
def offset(im):
im3 = ImageChops.offset(im, 300, 200)
im3.save('offset.jpg')
im3.close()
这个方法用于切割图片,然后再对角互换,啥意思?
看结果:
是不是秒懂,参数x,y就是切割点,也可以只写一个参数,如果y不给,默认与x相同。
ImageChops.screen(im1, im2)
所做运算:
out = MAX - ((MAX - image1) * (MAX - image2) / MAX)
def screen(im1, im2):
im3 = ImageChops.screen(im1, im2)
im3.save('screen.jpg')
im3.close()
看效果:
(需要一副钛合金眼镜!!!)
ImageChops.subtract(im1, im2, scale=1.0, offset=0),减运算
所做运算:
out = ((image1 - image2) / scale + offset)
def subtract(im1, im2):
im3 = ImageChops.subtract(im1, im2, scale=1.0, offset=0)
im3.save('substract.jpg')
im3.close()
和开头add一样,看效果:
惊悚再次袭来。(青青草原......还好不是帽子的颜色)
最后一个,和add一样的subtract。
ImageChops.subtract_modulo(im1, im2)
所做运算:
out = ((image1 - image2) % MAX)
def subtract_modulo(im1, im2):
im3 = ImageChops.subtract_modulo(im1, im2)
im3.save('subtract_modulo.jpg')
im3.close()
看效果:
夜空!!!(极速五厘米吗?为什么我突然想到这个,这种画风,像早期电视卡的时候,划盘出现的画面。)
ok,介绍完了,其实我还蛮想试试把《星月夜》图片取补的,白色的夜空是什么样的。白云取补,黑色的云又是什么样的。(乌云啊,蠢~~~~)
好了,先到这里吧。我要鞠躬下台喽。
后记:
括号内的内容为第二次审看添加内容,旨在您阅读时引起极大舒适。That‘s all.