Pillow 剪切、粘贴和合并图像

2021-07-06 11:35 更新

这个 ​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通道。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号