ImageChops模块包含一些算术图形操作,叫做channel operations(“chops”)。这些操作可用于诸多目的,比如图像特效,图像组合,算法绘图等等。
大多数通道操作只用于8位图像(比如“L”模式和“RGB”模式)。
一、ImageChops模块的函数
大多数通道操作有一个或者两个图像参数,返回一个新的图像。
1、 Constant
定义:constant(image,value) ⇒ image
含义:返回一个和给定图像尺寸一样的一层,该层被给定的像素值填充。
例子:
>>>from PIL import ImageChops
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im02.mode
'RGB'
>>>im02.getpixel((0,0))
(124, 127, 108)
>>> im= ImageChops.constant(im02, 100)
>>>im.mode
'L'
>>>im.getpixel((0,0))
100
>>>im.getpixel((100,100))
100
图像02为“RGB”图像,方法constant()只返回一个层,即图像im模式为“L”,且所有值都为给定的100。
2、 Duplicate
定义:duplicate(image) ⇒ image
含义:返回给定图像的拷贝。
例子:
>>>from PIL import ImageChops
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>>im02.mode
'RGB'
>>>im02.getpixel((100,100))
(147, 149, 128)
>>> im = ImageChops.duplicate(im02)
>>>im.mode
'RGB'
>>>im.getpixel((100,100))
(147, 149, 128)
3、 Invert
定义:invert(image) ⇒ image
含义:返回最大值255减去当前值的图像。
例子:
>>>from PIL import ImageChops
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>>im02.mode
'RGB'
>>>im02.getpixel((100,100))
(147, 149, 128)
>>> im= ImageChops.invert(im02)
>>>im.mode
'RGB'
>>>im.getpixel((100,100))
(108, 106, 127)
图像im如下:
4、 Lighter
定义:lighter(image1, image2) ⇒ image
含义:逐像素比较,选择较大值作为新图像的像素值。
例子:
>>>from PIL import ImageChops
>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im =ImageChops.lighter(im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(147, 149, 211)
图像im如下:
5、 Darker
定义:darker(image1,image2) ⇒ image
含义:逐像素比较,选择较小值作为新图像的像素值。
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.darker(im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(42, 131, 128)
图像im如下:
6、 Difference
定义:difference(image1, image2) ⇒ image
含义:返回两幅图像逐像素差的绝对值形成的图像。
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.difference (im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(105, 18, 83)
图像im如下:
7、 Multiply
定义:multiply(image1, image2) ⇒ image
含义:Superimposes twoimages on top of each other.如果与一张纯黑图片相乘,其结果是黑色的。如果与一张纯白图像相乘,其结果是不确定的。
out = image1 *image2 / MAX
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.multiply (im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(24, 76, 105)
图像im如下:
8、 Screen
定义:screen(image1,image2) ⇒ image
含义:Superimposes twoinverted images on top of each other.
out = MAX -((MAX - image1) * (MAX - image2) / MAX)
例子:
>>>from PIL import ImageChops
>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im = ImageChops.screen(im01,im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(165, 204, 234)
图像im为:
9、 Add
定义:add(image1,image2, scale, offset) ⇒ image
含义:两个图像对应像素值相加,然后除以变量offset,并且再加上变量offset。如果忽略,变量scale为1.0,变量offset为0.0。
out = (image1 +image2) / scale + offset
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.add(im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(165, 204, 234)
图像im为:
10、 Subtract
定义:subtract(image1, image2, scale, offset) ⇒ image
含义:两个图像对应像素值相减,然后除以变量offset,并且再加上变量offset。如果忽略,变量scale为1.0,变量offset为0.0。
out = (image1 -image2) / scale + offset
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.subtract (im01, im02)
>>>im01.getpixel((100,100))
(42, 131, 211)
>>>im02.getpixel((100,100))
(147, 149, 128)
>>>im.getpixel((100,100))
(0, 0, 83)
图像im为:
11、 Blend
定义:blend(image1, image2, alpha) ⇒ image
含义:与Image模块中的函数blend()一样,根据变量alpha合成两张图像。
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= ImageChops.blend(im01, im02, 0.7)
图像im为:
12、 Composite
定义:composite(image1, image2, mask) ⇒ image
含义:与Image模块中的函数composite()一样,根据变量mask合成两张图像。变量 mask的模式为“1”,“L”或者“RGBA”。这三个参数的尺寸必须一样大。
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> r,g,b = im01.split()
>>> im_r = ImageChops.composite(im01,im02, r)
>>> im_g= ImageChops.composite(im01, im02, g)
>>> im_b= ImageChops.composite(im01, im02, b)
图像im_r如下:
图像im_g如下:
图像im_b如下:
13、 Offset
定义:offset(image,xoffset, yoffset) ⇒ image
offset(image, offset) ⇒ image
含义:返回一个图像数据按照变量offset做了偏移的图像。Datawraps around the edges.如果变量yoffset缺省,它被假设与变量xoffset一样。
例子:
>>>from PIL import ImageChops
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> im= ImageChops.offset(im01, 200, 300)
图像im是将图像im01的左上角移到了坐标(200,300)的地方,右边超出边界的将移动到左边,下边超出边界的将移动到上边。图像im如下: