Pillow 剪切、粘贴和合并图像
这个 Image
类包含允许您操作图像中区域的方法。要从图像中提取子矩形,请使用 crop()
方法。
从图像复制子矩形
box = (100, 100, 400, 400)
region = im.crop(box)
区域由四元组定义,其中坐标为(左、上、右、下)。python图像库使用左上角带有(0,0)的坐标系。还要注意,坐标是指像素之间的位置,因此上面示例中的区域正好是300x300像素。
该区域现在可以以某种方式进行处理并粘贴回去。
处理子矩形,然后粘贴回去
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
粘贴区域时,区域的大小必须与给定区域完全匹配。此外,区域不能延伸到图像之外。但是,原始图像和区域的模式不需要匹配。如果没有,则在粘贴之前区域将自动转换(请参见 颜色空间变换 详情见下文)。
下面是一个附加示例:
滚动图像
def roll(image, delta):
"""Roll an image sideways."""
xsize, ysize = image.size
delta = delta % xsize
if delta == 0: return image
part1 = image.crop((0, 0, delta, ysize))
part2 = image.crop((delta, 0, xsize, ysize))
image.paste(part1, (xsize-delta, 0, xsize, ysize))
image.paste(part2, (0, 0, xsize-delta, ysize))
return image
对于更高级的技巧,粘贴方法还可以将透明蒙版作为可选参数。在此遮罩中,值255表示粘贴的图像在该位置是不透明的(即,粘贴的图像应按原样使用)。值0表示粘贴的图像完全透明。中间的值表示不同的透明度级别。例如,粘贴rgba图像并将其用作遮罩将粘贴图像的不透明部分,但不会粘贴其透明背景。
python图像库还允许您使用多波段图像的各个波段,例如RGB图像。split方法创建一组新图像,每个新图像包含原始多波段图像的一个波段。merge函数接受一个模式和一组图像,并将它们组合成一个新图像。以下示例交换RGB图像的三个波段:
拆分和合并波段
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
注意对于单波段图像, split()
返回图像本身。要使用单独的色带,您可能需要先将图像转换为“RGB”。
这里的波段可以理解为ps中的rgb通道。
更多建议: