PIL ImageDraw text() 中的 Latex 数学文本
Latex math text in PIL ImageDraw text()
我正在尝试注释我在 python 中创建的一些图形。因此,我正在生成一个包含指定文本的图像(使用 PIL ImageDraw)并将其与图像连接起来。现在,我想在文本中包含一个数学符号。创建文本图像时,有没有办法在乳胶数学中编写文本? This answer 建议使用 unicode 文本进行变通,但我更喜欢直接用 latex 编写文本。
MWE:
from PIL import ImageFont, Image, ImageDraw
from matplotlib import pyplot
def get_annotation(image_shape: tuple, title: str, font_size: int = 50):
frame_height, frame_width = image_shape[:2]
times_font = ImageFont.truetype('times-new-roman.ttf', font_size)
text_image = Image.new('RGB', (frame_width, frame_height), (255, 255, 255))
drawer = ImageDraw.Draw(text_image)
w, h = drawer.textsize(title, font=times_font)
drawer.text(((frame_width - w) / 2, (frame_height - h) / 2), text=title, fill=(0, 0, 0), font=times_font,
align='center')
annotation = numpy.array(text_image)
return annotation
if __name__ == '__main__':
anno = get_annotation((100, 300), 'frame $f_n$')
pyplot.imshow(anno)
pyplot.show()
我尝试将 frame $f_n$
传递给 title
参数,但文本图像中打印了美元。
PS:times-new-roman.ttf可以获得here
我找到了 sympy 的替代品 here
import sympy
sympy.preview(r'frame $f_n$', dvioptions=["-T", "tight", "-z", "0", "--truecolor", "-D 600"], viewer='file', filename='test.png', euler=False)
我正在尝试注释我在 python 中创建的一些图形。因此,我正在生成一个包含指定文本的图像(使用 PIL ImageDraw)并将其与图像连接起来。现在,我想在文本中包含一个数学符号。创建文本图像时,有没有办法在乳胶数学中编写文本? This answer 建议使用 unicode 文本进行变通,但我更喜欢直接用 latex 编写文本。
MWE:
from PIL import ImageFont, Image, ImageDraw
from matplotlib import pyplot
def get_annotation(image_shape: tuple, title: str, font_size: int = 50):
frame_height, frame_width = image_shape[:2]
times_font = ImageFont.truetype('times-new-roman.ttf', font_size)
text_image = Image.new('RGB', (frame_width, frame_height), (255, 255, 255))
drawer = ImageDraw.Draw(text_image)
w, h = drawer.textsize(title, font=times_font)
drawer.text(((frame_width - w) / 2, (frame_height - h) / 2), text=title, fill=(0, 0, 0), font=times_font,
align='center')
annotation = numpy.array(text_image)
return annotation
if __name__ == '__main__':
anno = get_annotation((100, 300), 'frame $f_n$')
pyplot.imshow(anno)
pyplot.show()
我尝试将 frame $f_n$
传递给 title
参数,但文本图像中打印了美元。
PS:times-new-roman.ttf可以获得here
我找到了 sympy 的替代品 here
import sympy
sympy.preview(r'frame $f_n$', dvioptions=["-T", "tight", "-z", "0", "--truecolor", "-D 600"], viewer='file', filename='test.png', euler=False)