如何使用Python PIL在特定位置粘贴?

6
我正在尝试创建一个程序,它可以拿取128张大小逐渐增大的气球图片,并将每张图片粘贴到不同尺寸的固定图像上。下面是需要使用的图片以及代码。目前我已经能够将它们粘贴在图像的左上角,但我希望每张图片都能够粘贴在复制品的下边缘中央。因此,问题总体而言就出现在“area var creation”(区域变量的创建)这一步骤: 背景图 气球图片
from PIL import Image

i = 0

while(i < 128):
    balloon = Image.open("NEAREST" + str(i) + ".jpg")
    canvas = Image.open("blank.jpg")

    area = (0 ,0,298+i,298+i)
    canvas.paste(balloon, area)
    canvas.save("PASTE"+str(i)+".jpg")
    i = i + 1

1
由于空白背景在整个过程中都是相同的,因此您应该考虑在进入循环之前只加载一次,然后在循环内使用 image.copy() 获取新副本,而不是在每次迭代中重新从磁盘读取和解码。 - Mark Setchell
1个回答

4

.paste()中设置的area是粘贴的位置(左侧,顶部,右侧,底部)。由于你将左侧和顶部设置为零,所以气球被粘贴在左上角。

要将其粘贴到底部中间,您必须计算出正确的位置值:

顶部的空间是背景高度减去粘贴图像的高度,即 425 - (298 + i),或者仅仅是 425 - 298 - i127 - i

侧面的空间是顶部空间的一半。

这样您就可以得到以下代码:

from PIL import Image

i = 0

while(i < 128):
    balloon = Image.open("NEAREST" + str(i) + ".jpg")
    canvas = Image.open("blank.jpg")

    space = 127 - i

    area = (int(space/2), space, int(space/2) + 298 + i, 425)
    canvas.paste(balloon, area)
    canvas.save("PASTE"+str(i)+".jpg")
    i = i + 1

请注意,这段代码是为您的情况硬编码的,即仅在背景为425x425像素时才有效。否则,您需要根据图像大小动态计算它。

1
非常感谢,你的答案很棒,它起作用了 + 我学到了新的东西 :) - revolution

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接