正确的语法来生成;“文本”;使用ImageMagick的图像

正确的语法来生成;“文本”;使用ImageMagick的图像,imagemagick,Imagemagick,我正在尝试用ImageMagick生成测试图像。图像只需要包含文本。直截了当地使用以下选项是行不通的: convert -background lightblue -fill blue -font Roboto -pointsize 72 label:Anthony label.gif 收益率: convert.im6: unable to read font `Roboto' @ warning/annotate.c/RenderType/853. convert.im6: no image

我正在尝试用ImageMagick生成测试图像。图像只需要包含文本。直截了当地使用以下选项是行不通的:

convert -background lightblue -fill blue -font Roboto -pointsize 72 label:Anthony label.gif
收益率:

convert.im6: unable to read font `Roboto' @ warning/annotate.c/RenderType/853.
convert.im6: no images defined `label.gif' @ error/convert.c/ConvertImageCommand/3044.
因此1)需要什么才能使用字体名称(我的整个桌面都使用Roboto,所以我假设它安装正确,其他字体名称也不起作用)和2)如果我删除字体规范,我仍然会得到第二行,并且没有输出

我错过什么了吗


在Ubuntu 14.04上使用
ImageMagick 6.7.7-10 2016-11-29 Q16

除了字体错误之外,在windows安装版本7上对我来说还行,因为我没有安装该字体。将其设置为arial将删除字体错误

尝试此操作以查看Imagemagick是否可以看到您的字体:

identify -list type
否则,我会尝试用路径直接链接到您的字体,并将.ttf放在末尾。我假设您的字体是.ttf字体,因为Imagemagick支持该类型,而另一种我不记得了


出于兴趣,您的版本已经使用了4.5年。

最终使用-size而不是-pointsize使其正常工作,并切换到
标题
,因为我可以更好地控制位置:

convert -background transparent -fill darkblue -font Roboto-Regular -size 200x100 -gravity center 'caption:Test' out.png

以上在IM 6.9.7.0 Q16 Mac OSX上运行良好,这是您正在使用的ImageMagick特定版本中的一个错误,由错误修复补丁的不正确后端口导致

有问题的修补程序是Debian修补程序
0161不要忽略SetImageBias偏差值
。我不知道这是否包含在2016年11月14日对
8:6.7.10-6ubuntu3.2
的安全更新中,或者2016年11月29日对
8:6.7.7.10-6ubuntu3.3
的安全补丁中(或者,至少我没有费心去弄清楚,因为它没有那么重要。)该补丁是作为,但是,由于对文件
coders/label.c
中的逻辑进行了重组,更正结果被插入了错误的位置

本质上,
label.c
的逻辑如下:

  • 如果未指定图像的大小或点大小,请确定最佳匹配
  • 如果未指定图像的宽度,请从计算的宽度复制图像
  • 如果未指定图像的高度,请从计算的高度复制图像
  • 如果未指定图像的pointsize,请从计算的pointsize复制它
  • 对图像参数进行一些其他相关设置
  • 将文本渲染到图像中
  • 如果无法使用生成的图像大小,则安全修补程序旨在避免步骤6。这避免了在web后端使用ImageMagick(这是常见的)时可能发生的拒绝服务攻击。它补充说:

    3a。如果图像尺寸不可用,则立即失败

    不幸的是,在应用修补程序的版本中,上述步骤的顺序不同,第三步与第5步混合在一起。(据我所见,这并没有真正的区别,但有点杂乱无章,这可能是它随后被修复的原因。)结果是,在从计算高度复制图像高度之前插入了添加的步骤3a。如果图像最初没有高度,这会导致检查失败,即使在该点计算了正确的高度

    说明明确指出,
    标签:
    源不需要
    -size
    (或
    -pointsize
    )参数。但对于放错位置的补丁,这是不正确的;除非在几何图形中指定了高度,否则将不会生成标签


    我还没有为此生成错误报告,因为它只适用于过时版本的Ubuntu(可能还有Debian)上的过时版本的ImageMagic。碰巧我和OP都在某台机器上使用这个过时的Ubuntu版本,我建议我们都升级。但是如果其他人有这个问题,我会回答这个问题(我在我的机器上研究相同的问题时发现的)。

    使用
    identification-list font
    列出字体,我可以看出我应该使用“Roboto Regular”。但是我将有
    未定义图像的消息。请看这里。。。字体没有问题……有迹象表明这是一个由安全问题的补丁引起的错误。见@rici谢谢你的提醒。
    
    convert -background lightblue -fill blue -font Arial -pointsize 72 label:"Anthony" label.gif