Простое наложение изображений в Python

В сегодняшнем посте я продолжу тему обработки изображений с помощью библиотеки PIL.

О самой библиотеке я рассказал в предыдущем посте. А сейчас я расскажу вам, как накладывать изображения друг на друга. Этот урок будет очень полезен, если вам, например, нужно наложить водяной знак с помощью Python.


Склеить две картинки в Python Imaging Library не представляет особого труда и хотя это не единственный инструмент который справляется с данной задачи, я, все таки, предпочитаю использовать именно его.

Об особенностях установки данной библиотеке и о базовых возможностях я уже упоминал, так что сосредоточимся непосредственно на задаче объединения двух изображений.


Необходимость наложить одно изображение на другое чаще всего необходимо для создания надписи или водяного знака.

Для примера я выбрал задачу наложения водяного знака.

В интернете существует масса сервисов для наложения водяного знака, но мы можем сделать это и сами, причем для огромного количества изображений за считаные секунды.


Итак, у нас имеется исходное изображение:


И вотермарк:



Теперь приступим к коду:

from PIL import Image

img = Image.open('image.png')
watermark = Image.open('watermark.png')

img.paste(watermark, (450, 230), watermark)
img.save("img_with_watermark.png")

Для накладывания водяного знака используется атрибут paste. Первым параметр - путь к изображению, которое будет накладываться, второй - координаты для наложения на первое изображение, третий - альфаканал (используется для наложения). Координаты вычисляем из того, в какое место хотим установить водяной знак с учетом размеров самой вотермарк. В моем случае это нижний правый угол.


Итоговое изображение:




Для того чтобы наложить водяной знак или какой то другой рисунок на больше количество изображений слегка изменим код:

from PIL import Image

img_list = ['image1.png', image2.png, image3.png, image4.png]
for image in img_list:
img = Image.open(image)
watermark = Image.open('watermark.png')

img.paste(watermark, (450, 230), watermark)
img.save(image)

Таким образом мы наложим водяной знак на каждое изображение в списке img_list.


На этом наш разговор об обработки изображений не оканчивается. Я буду продолжать знакомить вас с полезными возможностями библиотеки PIL. Эти посты можно найти под тэгом PIL