我正在尝试使用 ImageMagick 生成测试图像。图像只需要包含文本。直接使用IM 网站上的例子是行不通的:
convert -background lightblue -fill blue -font Roboto -pointsize 72 label:Anthony label.gif
Run Code Online (Sandbox Code Playgroud)
产量:
convert.im6: unable to read font `Roboto' @ warning/annotate.c/RenderType/853.
convert.im6: no images defined `label.gif' @ error/convert.c/ConvertImageCommand/3044.
Run Code Online (Sandbox Code Playgroud)
所以 1)需要什么才能使用字体名称(我的整个桌面都使用 Roboto,所以我假设它安装正确,其他字体名称也不起作用)和 2)如果我删除字体规范,我仍然得到第二行,没有输出。
我错过了什么吗?
ImageMagick 6.7.7-10 2016-11-29 Q16在 Ubuntu 14.04 上使用。
这是您正在使用的特定版本的 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(或者,至少,我没有费心去弄清楚,因为事实并非如此重要。)该补丁是作为此安全补丁的向后移植而创建的,但由于文件中逻辑的重组coders/label.c,更正最终被插入到错误的位置。
本质上,其逻辑label.c如下:
如果无法使用生成的图像大小,则安全补丁旨在避免步骤 6。这可以避免在 Web 后端(这很常见)上使用 ImageMagick 时可能发生的拒绝服务攻击。它补充说:
3a. 如果图像尺寸不可用,立即失败。
不幸的是,在应用补丁的版本中,上述步骤的顺序不同,第三步与步骤 5 混合在一起。(据我所知,这没有真正的区别,但有点杂乱无章,这可能是它随后被修复的原因。)结果是在从计算的高度复制图像高度之前插入了添加的步骤 3a 。如果图像最初没有高度,即使在该点计算了正确的高度,这也会导致检查失败。
说明清楚地表明label:源不需要-size(或-pointsize)参数。但是对于错位的补丁,结果证明这是不正确的;除非在几何体中指定了高度,否则不会生成标签。
我还没有为此生成错误报告,因为它仅适用于过时版本的 Ubuntu(可能还有 Debian)上的过时版本的 ImageMagic。碰巧我和 OP 都在某台机器上使用这个过时的 Ubuntu 版本,我对我们俩的建议是升级。但万一其他人有这个问题,我正在回答这个问题(我在我的机器上研究相同的问题时发现的。)
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |