Нарисовать жирный / курсивный текст с помощью PIL?
-
06-07-2019 - |
Вопрос
Как нарисовать жирный / курсивный текст с помощью PIL?В ImageFont.truetype (файл, размер) есть возможность указать только размер шрифта.
Решение
Используйте версию шрифта, выделенную жирным шрифтом / курсивом
Другие советы
Многие шрифты используют разные файлы TTF для своих версий, выделенных полужирным шрифтом / курсивом, поэтому я думаю, что если вы просто укажете этот файл, он будет работать.
Довольно хитрое решение сделать шрифт жирным, если (по какой-либо причине) у вас нет отдельной жирной версии шрифта, это напечатать один и тот же текст несколько раз с небольшим смещением.
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')
Что ж, это мой первый комментарий.Поехали.
Я постараюсь разъяснить процедуру.Сначала я использовал "название" шрифта следующим образом
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
Затем я вспомнил, что иногда у шрифтов есть другие "имена" или "filenames", поэтому я зашел в папку "шрифты", затем открыл шрифт Arial, в котором отображались все стили, такие как negrita (жирный шрифт), cursiva (курсив) и т.д.
Щелкнул правой кнопкой мыши по стилю "негрита", выбрал "свойства", а затем появилось "настоящее название" шрифта.
В моем случае это было название "ариблк".
Затем, наконец, просто использовал это имя вот так.
font = ImageFont.truetype("C:\Windows\Fonts\\ariblk.ttf",25)
Я знаю, что этот пост старый, но сегодняшний день помог мне найти решение.Поэтому я надеюсь помочь кому-нибудь.
=)