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

xen*_*oid 2 imagemagick

我正在尝试使用 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 上使用。

ric*_*ici 5

这是您正在使用的特定版本的 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如下:

  1. 如果未指定图像的大小或点大小,请计算出最佳拟合
  2. 如果未指定图像的宽度,则从计算出的宽度中复制它
  3. 如果未指定图像的高度,则从计算的高度复制它
  4. 如果未指定图像的点大小,则从计算出的点大小中复制它
  5. 对图像参数进行一些其他相关设置
  6. 将文本渲染到图像中。

如果无法使用生成的图像大小,则安全补丁旨在避免步骤 6。这可以避免在 Web 后端(这很常见)上使用 ImageMagick 时可能发生的拒绝服务攻击。它补充说:

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

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

说明清楚地表明label:源不需要-size(或-pointsize)参数。但是对于错位的补丁,结果证明这是不正确的;除非在几何体中指定了高度,否则不会生成标签。

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