Pillow это одна из самых популярных библиотек Python для работы с изображениями. Ранее эта библиотека называлась PIL и последний ее релиз был в 2009, после чего разработчики продолжили ее развитие под названием Pillow. В этой статье будет рассмотрен пример вставки текста и изображения в новую или существующую картинку.
Pillow устанавливается отдельно:
pip install Pillow
Создание и открытие изображения
Для открытия и создания изображения используется модуль Image. На следующем примере мы откроем существующее изображение:
from PIL import Image
im = Image.open('d:/beach.jpeg')
# Откроет изображение в новом окне
im.show()
В следующем примере мы создадим изображение, где мы должны указать:
- Цветовую модель. Например RGB,RGBA,CMYK,HCL и т.д.;
- Размер изображения в кортеже;
- По умолчанию изображение создается с черным фоном. Для его изменения нужно заполнить атрибут color.
from PIL import Image
im = Image.new('RGB', (200,200), color=('#FAACAC'))
# Откроет изображение в новом окне
im.show()
Сохранить изображение можно через save:
from PIL import Image
im = Image.new('RGB', (200,200), color=('#FAACAC'))
im.save('D:/new_pic.jpg')
Модуль Python os - примеры создания и работы с папками и путями
Добавление текста к изображению
Для изменения изображение используется класс ImageDraw. В следующем примере мы создадим объект этого класса с текстом, где нужно указать:
- Расположение текста. В примере ниже это (100, 100);
- Сам текст;
- Цвет текста.
from PIL import Image, ImageDraw
im = Image.new('RGB', (200,200), color=('#FAACAC'))
draw_text = ImageDraw.Draw(im)
draw_text.text(
(100,100),
'Test Text',
fill=('#1C0606')
)
im.show()
Если использовать кириллические символы, может появится ошибка:
- AttributeError: 'ImageFont' object has no attribute 'getmask2'
- UnicodeEncodeError: 'latin-1' codec can't encode characters
Для исправления ошибки вы можете использовать свой шрифт через класс ImageFont. Вы так же сможете указать размер шрифта:
from PIL import Image, ImageDraw, ImageFont
im = Image.new('RGB', (200,200), color=('#FAACAC'))
# Создаем объект со шрифтом
font = ImageFont.truetype('D:/Roboto/Roboto-Black.ttf', size=18)
draw_text = ImageDraw.Draw(im)
draw_text.text(
(100, 100),
'Текст 18px',
# Добавляем шрифт к изображению
font=font,
fill='#1C0606')
im.show()
Вставка изображения
Для создания водяного знака, например, откройте второе изображение и используйте функцию paste. При этом первый параметр с watermark будет использовать всю область изображения, а второй установит прозрачность (альфа-канал):
from PIL import Image
im = Image.open('d:/beach.jpeg')
# Изображение для водяного знака
watermark = Image.open('d:/logo.png')
im.paste(watermark, (25,25), watermark)
im.show()
Определение высоты и ширины
Если вы планируете открывать множество изображений, разных размеров и добавлять текст, например в правый нижний угол вы можете вычислить это местоположение. Объекты Image содержат размеры:
# Ширина и высота
im.size
# Ширина
im.width
# Высота
im.height
Если вы используете водяные знаки, то можно просто вычесть из основного изображения размеры водяного знака и получить корректное расположение в правом угле:
from PIL import Image
im = Image.open('d:/beach.jpeg')
watermark = Image.open('d:/logo.png')
# Вычисляем расположение watermark
position = (im.width - watermark.width,
im.height - watermark.height)
im.paste(watermark, position, watermark)
im.show()
...