如何在PIL中设置字体?
How to set font in PIL?
如何设置和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'
您在 multiline_text
中用作参数 font
的变量 params
是一个字典,而该函数需要一个字体对象。因此,您首先需要根据这些参数创建一个字体对象。参见 docs。
fnt = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 40)
如何设置和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'
您在 multiline_text
中用作参数 font
的变量 params
是一个字典,而该函数需要一个字体对象。因此,您首先需要根据这些参数创建一个字体对象。参见 docs。
fnt = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 40)