使用Wand / ImagaMagick Python将文本字符串渲染为图像以计算长度

时间:2015-10-02 10:42:09

标签: python imagemagick wand

我需要计算使用自定义字体渲染大量字符串时的长度。从shell脚本和ImageMagick我可以使用annotate命令行选项执行某些操作。

convert -debug annotate xc: -font "customfont.ttf" -pointsize "25" -annotate 0 "this is the text" out.png

然后读取渲染图像的宽度。

我很难理解如何使用python' Wand'库。我创建了一个字体对象,但我似乎需要定义画布的宽度以将字体绘制到。

任何建议表示赞赏。

2 个答案:

答案 0 :(得分:4)

使用,您将使用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