PIL.Image.alpha_composite - выбрать начальные точки - PullRequest
0 голосов
/ 29 февраля 2020

Мне нужно «вставить» одно изображение с 0 альфа-слоем в другое. Для этого я использую функцию PIL.Image.alpha_composite. В его документах говорится, что оба изображения должны быть одинакового размера. Но это определенно не правда. Этот код показывает, что я могу смешать 2 изображения разных размеров:

from PIL import Image, ImageDraw

image_size = (700, 500)
rect_size = (700, 200)
shape = [(0, 0), rect_size] 

#Create blank image 700x500
im1 = Image.new("RGBA", image_size)

#Create blank image for rectangle drawing 700x200
im2 = Image.new("RGBA", rect_size)

#Draw rectangle on it with the same 700x200 dims
im3 = ImageDraw.Draw(im2) 
im3.rectangle(shape, fill ="#ffff33")

#Composite 2 images of 700x500 and 700x200 sizes
im1.alpha_composite(im2)

im1.show()

Результат может быть таким: enter image description here

Моя проблема в том, что я хочу поставить прямоугольник на дно. Можно ли как-то это сделать?

1 Ответ

0 голосов
/ 29 февраля 2020

Почему бы вам не установить размер im2 для размера изображения (700, 500) и нарисовать прямоугольник внизу im2. Как это:

from PIL import Image, ImageDraw

image_size = (700, 500)
rect_size = (700, 500)
# Draw rectangle from first point (x=0,y=300) to the second point (x =700,y=500)
shape = (0,300,700,500)

#Create blank image 700x500
im1 = Image.new("RGBA", image_size)

#Create blank image for rectangle drawing 700x200
im2 = Image.new("RGBA", rect_size)


#Draw rectangle on it with the same 700x200 dims
im3 = ImageDraw.Draw(im2)
im3.rectangle(shape, fill ="#ffff33")


#Composite 2 images of 700x500 and 700x200 sizes
im1.alpha_composite(im2)

im1.show()
...