На этом шаге мы рассмотрим вывод текста средствами этой библиотеки.
Вывести текст на изображение позволяет метод text() из модуля ImageDraw библиотеки pillow. Метод имеет следующий формат:
text (<Координаты>, <Строка>, fill=<Цвет>, font=<Объект шрифта>)
В первом параметре указывается кортеж из двух элементов, задающих координаты левого верхнего угла прямоугольной области, в которую будет вписан текст. Во втором параметре задается текст надписи. Параметр fill определяет цвет текста, а параметр font задает используемый шрифт. Для создания объекта шрифта предназначены следующие функции из модуля ImageFont:
>>> from PIL import Image, ImageDraw, ImageFont >>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw (img) >>> font = ImageFont.load_default() >>> draw.text ( (10, 10), "Hello", font=font, fill="red") >>> img.show()
Результат:
Рис.1. Вывод текста функцией load_default ()
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw (img) >>> font = ImageFont.load("pilfonts/helvO12.pil") >>> draw.text ( (10, 40), "Hello", font=font, fill="blue") >>> img.show()
Результат:
Рис.2. Вывод текста функцией load ()
Однако вывести русские буквы таким способом тоже нельзя.
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw (img) >>> txt = "Привет, мир!" >>> font_file = r"C:\Windows\Fonts\arial.ttf" >>> font = ImageFont.truetype (font_file, size=24) >>> draw.text ( (10, 80), txt, font=font, fill=(0, 0, 0) ) >>> img.show()
Результат:
Рис.3. Вывод текста функцией truetype ()
Получить размеры прямоугольника, в который вписывается надпись, позволяет метод textsize() класса ImageDraw. Формат метода:
textsize (<Строка>, font=<Объект шрифта>)
Метод возвращает кортеж из двух элементов: (<Ширина>, <Высота>). Кроме того, можно воспользоваться методом getsize(<Строка>) объекта шрифта, возвращающим аналогичный результат. Пример:
>>> txt = "Привет, мир!" >>> font_file = r"C:\Windows\Fonts\arial.ttf" >>> font = ImageFont.truetype (font_file, size=24) >>> draw.textsize (txt, font=font) (143, 27) >>> font.getsize (txt) (143, 27)
На следующем шаге мы рассмотрим вывод текста средствами библиотеки wand.