- Используем Python Pillow для вставки текста и изображения в картинку
- Создание и открытие изображения
- Добавление текста к изображению
- Вставка изображения
- Определение высоты и ширины
- How to add text on an image using pillow in python ?
- 1 — Create an image with pillow and add text on it
- 2 — Use an existing image and add text with pillow
- 3 — References
- Benjamin
Используем Python Pillow для вставки текста и изображения в картинку
Pillow это одна из самых популярных библиотек Python для работы с изображениями. Ранее эта библиотека называлась PIL и последний ее релиз был в 2009, после чего разработчики продолжили ее развитие под названием Pillow. В этой статье будет рассмотрен пример вставки текста и изображения в новую или существующую картинку.
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. В следующем примере мы создадим объект этого класса с текстом, где нужно указать:
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()
How to add text on an image using pillow in python ?
Example of how to add text on an image using pillow in python:
1 — Create an image with pillow and add text on it
Example 1: let’s for example create a simple image with a red background:
from PIL import Image
img = Image.new('RGB', (600, 400), color = 'red')
img.save('pil_red.png')
To add text, you must first download a ‘font’ file locally to your machine, for example for Times Roman [times-ro.ttf] (https://www.download-free-fonts.com/details/86847/ times-roman) (freely available font files can be found on the web). We can then add text to the figure using the «Times Roman» font like this:
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
font = ImageFont.truetype("times-ro.ttf", 24)
img = Image.new('RGB', (600, 400), color = 'red')
draw = ImageDraw.Draw(img)
draw.text((300, 200),"Hello World !",(0,0,0),font=font)
img.save('pil_red.png')
2 — Use an existing image and add text with pillow
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
font = ImageFont.truetype("times-ro.ttf", 34)
img = Image.open('eiffel-tower.jpeg')
draw = ImageDraw.Draw(img)
draw.text((100, 200),"Hello Paris !",(0,0,0),font=font)
img.save('eiffel_tower_02.png')
3 — References
Benjamin
Greetings, I am Ben! I completed my PhD in Atmospheric Science from the University of Lille, France. Subsequently, for 12 years I was employed at NASA as a Research Scientist focusing on Earth remote sensing. Presently, I work with NOAA concentrating on satellite-based Active Fire detection. Python, Machine Learning and Open Science are special areas of interest to me.