Как вставить одно изображение в другое используя Pillow

Уроки Pillow в Python

Метод paste() из библиотеки Pillow, предоставляет возможность вставки одного изображения в другое изображение.

В данной статье будут рассматриваться следующие аспекты:

  • Обычная вставка одного изображения в другое изображение;
  • Вставка изображения с указанием координат для вставки;
  • Использование маски.

Содержание статьи

Импортируем модуль Image из библиотеки PIL и открываем базовое (фоновое) изображение, куда будет производиться вставка другого изображения.

Установка библиотеки Pilllow

Модули ImageDraw и ImageFilter мы будем использовать для создания маски. Вы можете пропустить этот момент, если вам нужна простая вставка изображения.

Сохраните эти два изображения:

  • guido-van-rossum.jpg (создатель языка программирования Python);
  • fon.jpg (Фоновое изображение).
Как вставить одно изображение в другое используя PillowКак вставить одно изображение в другое используя Pillow

Обычная вставка изображения через PIL

Вызываем метод paste() от изображения фона и указываем картинку для вставки.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

По умолчанию изображение вставляется в верхней левой части фоновой картинки.

Результат выполнения данного кода:

Pillow уроки python

Метод paste() переписывает объект фонового изображение, поэтому, если вы хотите сохранить оригинальную картинку из переменной im1, то скопируйте объект уже открытого изображения через метод copy().

Координаты для вставки изображения

Позиция для вставки картинки указывается с помощью кортежа (координата х верхнего левого угла, координата y верхнего левого угла) во втором параметре box.

Ниже мы увидим готовый результат. Изображение с Гвидо Ван Россумом была вставлена поверх другого изображения со смещением слева на 100 пикселей и смещение сверху на 50 пикселей.

Уроки Pillow

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

Уроки Pillow Python

Использование маски в Pillow

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

Изображение, которое будем использовать как маску должно быть такого же размера, что и встраиваемая картинка, и у него должны быть следующие три типа режима mode:

  • 1: 1-битная картинка (бинарное изображение);
  • L: 8-битое черно-белое изображение;
  • RGBA: Картинка с альфа каналом (прозрачная).

Когда маска является 8-битной (черно-белой mode='L'), фон виден, когда значение маски равно 0 (черный), а встраиваемой картинки — 255 (белый). Для других значений обе картинки сливаются в соответствии со значением.

Нарисуем белый круг на черном фоне с помощью модуля ImageDraw для генерации маски.

Python PIL маска

Подробнее о рисовании с помощью Pillow можно прочесть в данной статье — Рисование круга, прямоугольника, линии в Python

Процесс вставки осуществляется через использование данной картинки как маски.

Что произойдет с данной маской?

  • Все темные пиксели маски будут использованы как метки для удаления этого пикселя из нашей картинки с Гвидо Ван Россумом;
  • Светлая часть маски оставит пиксели как есть;
  • Если пиксели маски серые (не совсем белые и не совсем черные), то данная часть будет прозрачной только на несколько процентов.

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

Pillow Маска примеры

Когда маска размывается с помощью модуля ImageFilter, границы можно смешивать и вставлять.

У нас получилась такая маска:

Маска для PIL Python

Вот и готовый результат с применением данной маски:

Маска в Pillow Python

Модуль ImageDraw не ограничивается только геометрическими фигурами, маски могут вставляться в любой форме.

Попробуйте использовать вот такую картинку с черно-белой бабочкой.

Как вставить одно изображение в другое используя Pillow

После того, как метод open() откроет картинку, она приспособится к размеру встраиваемого изображения через использование метода resize(), а режим конвертируется в 'L' (черно-белое) через метод convert().

Полученный результат:

Как вставить одно изображение в другое используя Pillow

Это не самый лучший пример, форма довольно сложная, и случай для ее использования сложно придумать. А вот маскам со звездочками и сердечками можно найти применение.