Как установить шрифт в PIL?

#fonts #python-imaging-library

#шрифты #python-imaging-library

Вопрос:

Как установить тот же шрифт, что и в LaTeX? Я попробовал следующий код. Я использовал аналогичный способ, который я использую для matplotlib.

 from PIL import Image, ImageFilter
from PIL import Image, ImageDraw, ImageFont

import matplotlib.pyplot as plt

plt.rcParams['text.latex.preamble'] = [r"usepackage{bm}", r"usepackage{amsmath}"]

params = {'text.usetex' : True,
          'font.size' : 25,
          'font.family' : 'lmodern',
          'text.latex.unicode': True,
          }
plt.rcParams.update(params)

im = Image.new("RGB", (512, 512), (128, 128, 128))
draw = ImageDraw.Draw(im)

draw.multiline_text((100, 1000), 'Pillow sample', fill=(0, 0, 0), font=params)

im.show()
  

Я получил следующую ошибку:

     draw.multiline_text((100, 1000), 'Pillow sample', fill=(0, 0, 0), font=params)
  File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 234, in multiline_text
    line_spacing = self.textsize('A', font=font)[1]   spacing
  File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 263, in textsize
    return font.getsize(text, direction, features)
AttributeError: 'dict' object has no attribute 'getsize'
  

Ответ №1:

Переменная params , которую вы используете в качестве аргумента для аргумента font , multiline_text является словарем, в то время как эта функция ожидает объект шрифта. Итак, сначала вам нужно создать объект шрифта из этих параметров. Смотрите Документы.

 fnt = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 40)