PIL 只生成网格的顶部行

1 投票
1 回答
23 浏览
提问于 2025-04-14 16:51

我写了一个简单的程序,用PIL来生成一张图片网格,但它只生成了第一行,其他的都没有出来。以下是我的代码:

def create_grid(im2,w,h):
     image = Image.new("RGBA",(2000,1000),(0,0,0))
     x = 0
     y = 0
     x_change = int(2000/w)
     y_change = int(1000/h)
     while y<1000:
             while x<2000:
                     image.paste(im2,(x,y))
                     x += x_change
             y += y_change
     image.show()

在这个例子中,im2的大小是100x100,我调用了create_grid(im2,20,10)。为什么只出现了第一行呢?

1 个回答

3

你在从第一行切换到第二行时,忘记把 x 坐标重置了。所以,接下来的图片都被放在了看不见的区域,x 的值大于2000。换句话说,xwhile 条件再也不会满足了:根本没有其他图片被尝试放置。

只需要加一行 x = 0 就可以了:

def create_grid(im2,w,h):
     image = Image.new("RGBA",(2000,1000),(0,0,0))
     x = 0
     y = 0
     x_change = int(2000/w)
     y_change = int(1000/h)
     while y<1000:
             while x<2000:
                     image.paste(im2,(x,y))
                     x += x_change
             y += y_change
             x = 0
     image.show()

撰写回答