我需要计算使用自定义字体渲染大量字符串时的长度。从shell脚本和ImageMagick我可以使用annotate命令行选项执行某些操作。
convert -debug annotate xc: -font "customfont.ttf" -pointsize "25" -annotate 0 "this is the text" out.png
然后读取渲染图像的宽度。
我很难理解如何使用python' Wand'库。我创建了一个字体对象,但我似乎需要定义画布的宽度以将字体绘制到。
任何建议表示赞赏。
答案 0 :(得分:4)
使用wand,您将使用wand.drawing.Drawing.get_font_metrics
,它将返回FontMetrics
类的实例。
实施例
from wand.image import Image
from wand.drawing import Drawing
with Image(filename='wizard:') as img:
with Drawing() as context:
context.font_family = 'monospace'
context.font_size = 25
metrics = context.get_font_metrics(img,
"How BIG am I?",
multiline=False)
print(metrics)
#=> FontMetrics(character_width=25.0,
# character_height=25.0,
# ascender=23.0,
# descender=-5.0,
# text_width=170.0,
# text_height=29.0,
# maximum_horizontal_advance=50.0,
# x1=0.0,
# y1=0.0,
# x2=19.21875,
# y2=18.0,
# x=170.0,
# y=0.0)
答案 1 :(得分:2)
您可以使用label:
并让ImageMagick计算您所需的宽度吗?
convert -font "Arial" -pointsize 64 label:"this is the text" out.png
identify out.png
out.png PNG 396x73 396x73+0+0 8-bit sRGB 256c 2.57KB 0.000u 0:00.000
或更简单地说:
convert -font "Arial" -pointsize 64 label:"this is the text" -format %w info:
396
或者,正如Eric建议的那样:
convert -font "Arial" -pointsize 64 label:"this is the text" -format %w +identify result.png
396
或者,如果你想使用annotate
,你可以制作一个更大的画布并修剪它,如下所示:
convert -gravity west xc:white[1000x1000] -font "arial" -pointsize 32 -annotate 0 "this is the text" -trim -format %w info:
197