我正在尝试用ImageMagick生成测试图像。图像只需要包含文本。坦率地说,使用example on the IM site是行不通的:
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)如果我删除字体规范,我仍然得到第二行并且没有输出。
我是不是遗漏了什么?
在Ubuntu14.04上使用ImageMagick 6.7.7-10 2016-11-29 Q16。
发布于 2017-01-27 06:22:46
这是您正在使用的特定ImageMagick版本中的一个错误,由错误修复补丁的错误后端口导致。
有问题的补丁是Debian patch 0161-Do-not-ignore-SetImageBias-bias-value。我不知道这是不是包含在2016年11月14日的8:6.7.7.10-6ubuntu3.2安全更新或2016年11月29日的8:6.7.7.10-6ubuntu3.3安全补丁中(或者,至少我没有费心去弄清楚,因为它并不那么重要)。该补丁是作为this security patch的后端口创建的,但由于对文件coders/label.c中的逻辑进行了重组,更正最终被插入到了错误的位置。
本质上,label.c的逻辑如下:
< parameters
如果无法使用生成的映像大小,则安全补丁旨在避免步骤6。这避免了在web后端使用ImageMagick时可能发生的拒绝服务攻击(这是很常见的)。它增加了:
3a。如果图像尺寸不可用,则立即失败。
不幸的是,在要应用补丁的版本中,上述步骤的顺序不同,第三步与步骤5混合在一起。(据我所知,这并没有真正的区别,但它有点混乱,这可能是后来修复它的原因。)结果是,在从计算的高度复制图像的高度之前插入所添加的步骤3a。如果图像最初没有高度,这会导致检查失败,即使在该点计算了正确的高度也是如此。
这些说明清楚地表明label:源不需要-size (或-pointsize)参数。但是对于错放的面片,这被证明是不正确的;除非在几何图形中指定了高度,否则将不会生成标签。
我没有为此生成错误报告,因为它只适用于过时版本的ImageMagic (可能还有Debian)。碰巧我和OP都在一些机器上使用这个过时的Ubuntu版本,我建议我们两个都升级。但如果其他人有这个问题,我会回答这个问题(我在尝试在我的机器上研究相同的问题时发现了这个问题)。
发布于 2016-12-19 01:41:23
最终让它使用-size而不是-pointsize工作,并切换到caption,因为我可以更好地控制位置:
convert -background transparent -fill darkblue -font Roboto-Regular -size 200x100 -gravity center 'caption:Test' out.png发布于 2016-12-31 06:31:03
convert -background lightblue -fill blue -font Arial -pointsize 72 label:"Anthony" label.gif上面的代码在IM 6.9.7.0 Q16 Mac上运行良好
https://stackoverflow.com/questions/41209277
复制相似问题