Python (PIL): осветлить прозрачное изображение и вставить в другое
У меня два png-изображения (A & B) одинакового размера, второе (B) одно частично прозрачное.
Если я вставлю изображение B в изображение A, используя код
base.paste(overlay, mask=overlay)
Я получаю почти идеальную комбинацию из них.
Но я хочу осветлить изображение B, прежде чем вставить его в изображение A. Я попытался использовать маску, подобную Image.new("L", size, 80), и я могу осветлить изображение (B), но оно также затемняет изображение (А) и это не должно быть изменено.
В командной строке я могу сделать то, что я хочу с ImageMagick, вот так:
composite -dissolve 40 overlay.png base.png result.png
Это именно то, что мне нужно, но как я могу сделать это с помощью Python.
1 ответ
Насколько я понимаю, опция растворения изменяет только альфа-канал. Итак, если вы хотите, чтобы ваш альфа-канал сохранял только 40% своих значений, вы делаете то же самое в PIL:
from PIL import Image
overlay = Image.open('overlay.png')
base = Image.open('base.png')
bands = list(overlay.split())
if len(bands) == 4:
# Assuming alpha is the last band
bands[3] = bands[3].point(lambda x: x*0.4)
overlay = Image.merge(overlay.mode, bands)
base.paste(overlay, (0, 0), overlay)
base.save('result.png')
В этом коде я разделил изображение на несколько полос. Если их четыре, я предполагаю, что последний представляет альфа-канал. Поэтому я просто умножаю на 0,4 (40%) его значения и создаю новое изображение для вставки поверх базового изображения.