from PIL import Image img = Image.blend(im1, im2, alpha)
im1
- первое изображение/картинка. Должна быть в режима RGBA
.im2
- второе изображение/картинка. Должна иметь тот же режим и размер, что и первое изображение.alpha
- альфа-фактор интерполяции. Если альфа равна 0,0, то возвращается копия первого изображения. Если альфа равна 1,0, то возвращается копия второго изображения. Ограничений по альфа-значению нет. При необходимости результат обрезается, чтобы соответствовать допустимому выходному диапазону.Image
.Функция Image.blend()
модуля Pillow
создает новое изображение путем интерполяции между двумя входными изображениями с использованием постоянной альфы.
Интерполяция происходи по формуле:
out_image = image1 * (1.0 - alpha) + image2 * alpha
alpha
- фактор интерполяции. Если альфа равна 0,0, то возвращается копия первого изображения. Если альфа равна 1,0, то возвращается копия второго изображения. Ограничений по альфа-значению нет. При необходимости результат обрезается, чтобы соответствовать допустимому выходному диапазону.
Image.resize()
.Image.convert()
.В этом примере сделаем скриншот рабочего стола и смешаем с ним созданную картинку с текстом.
from PIL import (Image, ImageFont, ImageGrab, ImageDraw) import time # сделаем скриншот # задержка в 2 секунды, для того, # чтобы переключиться на рабочий стол time.sleep(2) # создание скриншота scr1 = ImageGrab.grab() # сохраним, понадобится для следующего примера scr1.save('scr1.jpg') # изображение, которое будем накладывать # создадим подложку размером со скриншот scr2 = Image.new("RGB", scr1.size) # получаем контекст рисования d = ImageDraw.Draw(scr2) # подключим шрифт fnt = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSerifBold.ttf", size=100) # координаты привязки текста xy = (scr1.size[0]//2, scr1.size[1]//2) # накладываем белый текст на подложку d.text(xy, "DOCS-PYTHON.RU", font=fnt, anchor="ms", fill=(255, 255, 255)) # сохраним, понадобится для следующего примера scr2.save('scr2.jpg') ########################## # Смешиваем изображения # ########################## img = Image.blend(scr1, scr2, 0.2) # сохраняем и смотрим что получилось img.save('test.jpg')
Что бы было понятнее что происходи изобразим тоже самое при помощи NumPy
.
import numpy as np from PIL import Image # открываем скриншот scr1 = Image.open('scr1.jpg') # NumPy и Pillow понимают друг друга без # каких либо дополнительных преобразований arr_src1 = np.asarray(scr1) # открываем картинку с надписью scr2 = Image.open('scr2.jpg') # передаем ее в NumPy arr_src2 = np.asarray(scr2) ######################### # смешиваем изображения # ######################### # применим формулу к массивам изображений, # представленную в описании функции `Image.blend()` alpha = 0.2 dst_float = arr_src1 * (1 - alpha) + arr_src2 * alpha print(dst_float.dtype) # float64 # для Pillow нужен тип `uint8` dst = dst_float.astype(np.uint8) # что получилось сохраняем Image.fromarray(dst).save('test_numpy.jpg')