Python - визуализация наклонного шрифта - PullRequest
1 голос
/ 15 февраля 2020

Этот вопрос соответствует ответу на мой предыдущий вопрос в Stackoverflow.

Я создаю программу, которая преобразует текст в изображение. Я хочу сделать это с использованием шрифта OCR A. Но поскольку шрифт OCR A не имеет соответствующего файла шрифта для курсива, я должен выполнить наклон вертикального шрифта вручную.

enter image description here

Вертикальный шрифт

enter image description here

Наклонный шрифт

Ниже мой исходный код:

 from PIL import Image
 from PIL import ImageDraw
 from PIL import ImageFont
 import numpy as np


 #Returns the text size in terms of width and height.
 def getSize(txt, font):
     testImg = Image.new('RGB', (1, 1))
     testDraw = ImageDraw.Draw(testImg)
     return testDraw.textsize(txt, font)

 text = 'CNN Font Recognition Model'
 font_size = 12
 font = ImageFont.truetype('ocra.ttf' , font_size)  
 #ocra.ttf is a font file for OCR A Regular font (I have to render it slanted) 

 width, height = getSize(text, font)

 #Creates an image with white background of constant size.
 img = Image.new('RGB',(width, height), 'white')
 d = ImageDraw.Draw(img)
 d.text((0,0), text, fill='black', font=font)
 img.save('slanted_ocr_a.png')

Как вручную наклонить вертикальный шрифт OCR A? Спасибо. Вы можете скачать образец ocra.ttf файла здесь.

1 Ответ

4 голосов
/ 15 февраля 2020

Этот ответ на подобный вопрос, вероятно, является самым простым способом, хотя это не совсем то, что вы хотите сделать. По сути, вы визуализируете вертикальный шрифт в изображение, а затем наклоняете (срезаете) все изображение, используя метод Image.transform PIL.

Для достижения sh того, что вы просите (наклон шрифта до * 1007). * это возможно), но потребуется много работы, чтобы переопределить схему PIL truetype, чтобы базовый механизм шрифтов (FreeType) выполнил наклонное преобразование на уровне шрифта . Интерфейс PIL truetype просто не может express преобразовать, поэтому вам придется переопределить / пропатчить его, чтобы передать его до FreeType, где установлен шрифт.

Другой вариант может состоять в том, чтобы пропустить схему truetype в PIL и использовать библиотеку Python для рендеринга шрифтов, которая позволяет напрямую устанавливать преобразование шрифта, а затем извлекать данные пикселей из этого в ваш PIL Image. Одна из таких библиотек - freetype-py .

...