Как нарисовать жирный/курсивный текст с помощью PIL? ImageFont.truetype(file, size) имеет возможность указать только размер шрифта.
Нарисовать жирный/курсивный текст с помощью PIL?
Ответы (5)
Используйте полужирную/курсивную версию шрифта
Довольно хакерское решение сделать шрифт полужирным, если (по какой-либо причине) у вас нет отдельной полужирной версии шрифта, — это напечатать один и тот же текст несколько раз с небольшим смещением.
andaleMono = ImageFont.truetype(ANDALE_MONO_PATH,16)
text = "hello world"
mainOffset = (50,50)
xoff, yoff = mainOffset
draw.text(mainOffset,text,font=andaleMono,fill='black')
draw.text((xoff+1,yoff+1),text,font=andaleMono,fill='black')
draw.text((xoff-1,yoff-1),text,font=andaleMono,fill='black')
Многие шрифты используют разные файлы TTF для своих жирных/курсивных версий, поэтому я думаю, что если вы просто укажете этот файл, он будет работать.
Ну, это мой первый комментарий. Вот так.
Постараюсь прояснить процедуру. Сначала я использовал «имя» шрифта, подобное этому
font = ImageFont.truetype("C:\Windows\Fonts\\Arial Negrita.ttf",25)
но только получил некоторые ошибки, как это:
Traceback (most recent call last):
File "C:/Users/555STi/PycharmProjects/PIL/img.py", line 8, in <module>
font = ImageFont.truetype("C:\Windows\Fonts\Arial negrita.ttf",25)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 262, in truetype
return FreeTypeFont(font, size, index, encoding)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 142, in __init__
self.font = core.getfont(font, size, index, encoding)
IOError: cannot open resource
Затем я вспомнил, что иногда шрифты имеют другие «имена» или «имена файлов», поэтому я перешел в папку шрифтов, а затем открыл шрифт Arial, в котором отображались все стили, такие как negrita (жирный), cursiva (курсив) и т. д.
Щелкнул правой кнопкой мыши по стилю «негрита», выбрал «свойства», а потом было «настоящее имя» шрифта.
В моем случае имя было «ариблк».
Потом, наконец, просто использовал такое имя.
font = ImageFont.truetype("C:\Windows\Fonts\\ariblk.ttf",25)
Я знаю, что этот пост старый, но сегодня помог мне найти решение. Так что я надеюсь помочь любому.
=)
До сих пор нет жирных элементов в качестве параметра, но вы можете легко решить эту проблему, добавив обводку к тексту того же цвета, что и текст. это будет иметь смысл, так как жирный шрифт в следующем коде подробно описывает, как использовать обводку
draw.text((x, y), text, fill=color, font=font, stroke_width=2,
stroke_fill="black")