Python PIL / Image从序列图像制作3x3网格

时间:2016-06-20 11:24:06

标签: python image python-imaging-library pillow

我正在尝试通过序列图像制作3x3网格,但似乎无法正确使用它。图像位于文件夹中,命名为0 - 8(共9个图像),最终一个图像网格3x3的输出应如下所示

image0 image1 image2
image3 image4 image5
image6 image7 image8 

我试图关注How do you merge images into a canvas using PIL/Pillow?,但无法正常使用。

无需更改图像中的任何内容,只需将它们合并并制作3x3网格

即可

2 个答案:

答案 0 :(得分:6)

以下是一个如何做到这一点的示例(考虑图像是您的一张图片):

    img_w, img_h = image.size
    background = Image.new('RGBA',(1300, 1300), (255, 255, 255, 255))
    bg_w, bg_h = background.size
    offset = (10,(((bg_h - img_h)) / 2)-370)
    background.paste(image1,offset)

根据您的要求调整偏移,宽度和高度。

答案 1 :(得分:6)

要从 (cols*img_height, rows*img_width) 个图像中制作任意形状的网格 rows*cols

def image_grid(imgs, rows, cols):
    assert len(imgs) == rows*cols

    w, h = imgs[0].size
    grid = Image.new('RGB', size=(cols*w, rows*h))
    grid_w, grid_h = grid.size
    
    for i, img in enumerate(imgs):
        grid.paste(img, box=(i%cols*w, i//cols*h))
    return grid

在您的情况下,假设 imgsPIL 个图像的列表

grid = image_grid(imgs, rows=3, cols=3)