将文本字符串呈现为图像以使用 Wand/ImagaMagick Python 计算长度
Render text string to image to calculate length with Wand/ImagaMagick Python
我需要计算使用自定义字体呈现大量字符串时的长度。从 shell 脚本和 ImageMagick 我可以使用 annotate 命令行选项做一些事情。
convert -debug annotate xc: -font "customfont.ttf" -pointsize "25" -annotate 0 "this is the text" out.png
然后读取渲染图像的宽度。
我正在努力了解如何使用 python 'Wand' 库执行此操作。我已经创建了一个字体对象,但我似乎需要定义 canvas 的宽度来绘制字体。
感谢任何建议。
您可以使用 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
或者,正如埃里克建议的那样:
convert -font "Arial" -pointsize 64 label:"this is the text" -format %w +identify result.png
396
或者,如果你想使用 annotate
,你可以做一个更大的 canvas 和 trim,像这样:
convert -gravity west xc:white[1000x1000] -font "arial" -pointsize 32 -annotate 0 "this is the text" -trim -format %w info:
197
对于 wand,您将使用 wand.drawing.Drawing.get_font_metrics
,这将 return FontMetrics
class.
的一个实例
示例
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)
我需要计算使用自定义字体呈现大量字符串时的长度。从 shell 脚本和 ImageMagick 我可以使用 annotate 命令行选项做一些事情。
convert -debug annotate xc: -font "customfont.ttf" -pointsize "25" -annotate 0 "this is the text" out.png
然后读取渲染图像的宽度。
我正在努力了解如何使用 python 'Wand' 库执行此操作。我已经创建了一个字体对象,但我似乎需要定义 canvas 的宽度来绘制字体。
感谢任何建议。
您可以使用 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
或者,正如埃里克建议的那样:
convert -font "Arial" -pointsize 64 label:"this is the text" -format %w +identify result.png
396
或者,如果你想使用 annotate
,你可以做一个更大的 canvas 和 trim,像这样:
convert -gravity west xc:white[1000x1000] -font "arial" -pointsize 32 -annotate 0 "this is the text" -trim -format %w info:
197
对于 wand,您将使用 wand.drawing.Drawing.get_font_metrics
,这将 return FontMetrics
class.
示例
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)