Нарисовать жирный/курсивный текст с помощью PIL?

Как нарисовать жирный/курсивный текст с помощью PIL? ImageFont.truetype(file, size) имеет возможность указать только размер шрифта.


person jack    schedule 29.11.2009    source источник


Ответы (5)


Используйте полужирную/курсивную версию шрифта

person John La Rooy    schedule 29.11.2009
comment
Просто поясню: каждая версия шрифта поставляется в отдельном файле, например: Arial.ttf, ArialBold.ttf и т. д. - person btk; 29.02.2012
comment
Если вы используете Mac, вы можете найти файл шрифта в Font Book.app. Просто щелкните правой кнопкой мыши имя шрифта, затем нажмите «Показать в Finder». Вы можете проверить путь к файлу, перетащив файл шрифта в Terminal.app. - person Nori; 12.05.2021

Довольно хакерское решение сделать шрифт полужирным, если (по какой-либо причине) у вас нет отдельной полужирной версии шрифта, — это напечатать один и тот же текст несколько раз с небольшим смещением.

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')
person zara    schedule 06.09.2016

Многие шрифты используют разные файлы TTF для своих жирных/курсивных версий, поэтому я думаю, что если вы просто укажете этот файл, он будет работать.

person djc    schedule 29.11.2009

Ну, это мой первый комментарий. Вот так.

Постараюсь прояснить процедуру. Сначала я использовал «имя» шрифта, подобное этому

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)

Я знаю, что этот пост старый, но сегодня помог мне найти решение. Так что я надеюсь помочь любому.

=)

person Николаи Милош    schedule 24.05.2015
comment
Это отвечает на вопрос ОП? - person Nilambar Sharma; 24.05.2015
comment
@Ниламбар, что ты имеешь в виду? Извините, я здесь новенький. - person Николаи Милош; 24.05.2015
comment
@NikolaiMilos Он имеет в виду, что оригинальный постер (ОП) спрашивал о чем-то довольно конкретном. Вы отвечаете на вопрос, почему я получаю сообщение об ошибке при загрузке шрифта Arial Negrita? Если вы перечитаете вопрос, то заметите, что он совершенно другой. - person Paragon; 17.07.2015

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

    draw.text((x, y), text, fill=color, font=font, stroke_width=2,
          stroke_fill="black")
person Feisal Aswad    schedule 04.04.2021