Как вставить в определенное место с Python PIL? - PullRequest
4 голосов
/ 11 июля 2019

Я пытаюсь создать программу, которая берет 128 изображений воздушного шара, размер которых увеличивается с фиксированным изменением, и вставляет каждое изображение в отдельную копию фиксированного изображения определенного размера, изображение ниже, а также кодкод, который я сделал до сих пор, вставляет их в верхнюю левую часть изображения, и я добавляю каждую картинку для вставки в середину нижней границы копии, поэтому проблема в целом связана с созданием области var: фон изображение воздушного шара

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 Ответ

1 голос
/ 11 июля 2019

area, установленное в .paste(), - это позиция вставки (слева, сверху, справа, снизу).Поскольку вы устанавливаете влево и сверху на ноль, воздушный шар вставляется в верхний левый.

Чтобы вставить его в нижнюю середину, вы должны рассчитать правильные значения для позиции:

Пространство сверху - это высота фона минус высота вставленного изображения, т. Е. 425 - (298 + i), или просто 425 - 298 - i или 127 - i

Пространство сбоку составляет половину от размераtop.

Это дает вам этот код:

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 пикселей.В противном случае вам придется рассчитывать его динамически в соответствии с размером изображения.

...