Как вставить (режим RGBA) изображение в другое место в определенную позицию? - PullRequest
0 голосов
/ 16 декабря 2018

Используя подушку, alpha_composite работает только с изображениями того же размера, я хотел бы вставить блок в определенную позицию, сохраняя его альфа-канал.

Чтобы быть более точным, я бы хотелскопируйте / вставьте много раз полупрозрачное изображение в другое, поверх фоновое изображение.

Как это можно сделать с подушкой?

Вот мой код:

el_width, el_height = 100, 300
img = Image.open('partition.png')
img = img.convert("RGBA")

img_rect = Image.new('RGBA', (el_width, el_height), (0, 0, 0, 100))
draw = ImageDraw.Draw(img_rect)
# draw a semi-transparent rectangle:
draw.rectangle((0, 0, el_width, el_height), outline=(50, 155, 50, 155))
del draw

# trying to paste it:
img.paste(img_rect, (10, 10))
img.show()

Вот результат, вы можете видеть, что прямоугольник прозрачен, но его прозрачность игнорируется при использовании «вставки»:

problematic image

1 Ответ

0 голосов
/ 16 декабря 2018

Может быть, этот код поможет вам

from PIL import Image
import glob

foreground_name = 'BFB_Logo.png'
foreground = Image.open(foreground_name)
foreground = foreground.convert('RGBA')

for file_name in glob.glob('*.jpg'):
    print(file_name)
    background_name = file_name
    background = Image.open(background_name)

    # set position there
    x = int((background.size[0] / 2) - (foreground.size[0] / 2))
    y = int((background.size[1] / 2) - (foreground.size[1] / 2))

    background = background.convert('RGBA')
    background.paste(foreground, (x, y), mask = foreground)
    background.save('__{}.jpg'.format(background_name.split('.')[0]),'JPEG')

print('Ready')
...