【问题标题】:Python PIL/Image make 3x3 Grid from sequence ImagesPython PIL/Image 从序列图像制作 3x3 网格
【发布时间】:2016-10-21 15:16:52
【问题描述】:

我正在尝试按序列图像制作 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 Grid

【问题讨论】:

    标签: python image python-imaging-library pillow


    【解决方案1】:

    rows*cols 图像制作任意形状(cols*img_height, rows*img_width) 的网格:

    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)
    

    【讨论】:

    • 你确定吗?我刚刚检查过,它对我来说很好。
    • 抱歉,这实际上与我输入图像的方式有关:我写了image, *images = [PIL.Image.open(file) for file in sorted(glob.glob(images_in))],但后来只将images 传递给image_grid()。用images.insert(0, image) 解决了它。请随时纠正我 - 我知道这并不理想(但它有效!)。
    • 我猜你解压了 list 以单独使用image?作为images.insert(0, image) 的替代方案,您可以将[image, *images] 传递给image_grid :)
    • image, *images = my_listlist 解包为两个变量:image 将保存第一个元素 (ie my_list[0]) 和 @987654339 @ 其余部分 (ie my_list[1:]),单个星号用于 iterable unpacking。记住images 将是一个list(如果my_list 只有一个元素,它可以是空的)。此外,您可以将 list 解压缩到...另一个 list[*images],基本上就是 images。很酷的事情是你可以用额外的元素定义你的 list (就像你会...
    • ...用文字代替变量)。在这里我添加了image[image, *images]。所以生成的list 包含image 作为第一个元素,图像的内容(unpacked)作为list 的以下元素。了解这种行为的最好方法是自己尝试一下:定义x = [1,2,3],解包为a, *rest = xrest 会是什么?你能猜到[*rest, a] 会是什么吗?现在,对于一些更具挑战性的事情:a, *(what, _) = xwhat 会是什么? a, *(b,*c) = [1,2,3,4] 中的 c 怎么样?祝你好运;)
    【解决方案2】:

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

        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)
    

    调整偏移量、宽度和高度以满足您的要求。

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2016-02-15
      • 2021-06-27
      • 2020-01-03
      • 2022-12-15
      • 2022-12-10
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多