首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick生成“文本”图像的正确语法

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

Stack Overflow用户
提问于 2016-12-18 22:27:13
回答 4查看 2.4K关注 0票数 3

我正在尝试用ImageMagick生成测试图像。图像只需要包含文本。坦率地说,使用example on the IM site是行不通的:

代码语言:javascript
复制
convert -background lightblue -fill blue -font Roboto -pointsize 72 label:Anthony label.gif

收益率:

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

发布于 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的逻辑如下:

  1. 如果未指定图像的大小或点大小,则计算出最佳拟合宽度。如果未指定图像的宽度,则从计算的宽度中复制它。如果未指定图像的高度,则从计算的高度中复制它。如果未指定图像的点大小,则从计算的高度复制

< parameters

  1. Render >G219

如果无法使用生成的映像大小,则安全补丁旨在避免步骤6。这避免了在web后端使用ImageMagick时可能发生的拒绝服务攻击(这是很常见的)。它增加了:

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

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

这些说明清楚地表明label:源不需要-size (或-pointsize)参数。但是对于错放的面片,这被证明是不正确的;除非在几何图形中指定了高度,否则将不会生成标签。

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

票数 5
EN

Stack Overflow用户

发布于 2016-12-19 01:41:23

最终让它使用-size而不是-pointsize工作,并切换到caption,因为我可以更好地控制位置:

代码语言:javascript
复制
convert -background transparent -fill darkblue -font Roboto-Regular -size 200x100 -gravity center 'caption:Test' out.png
票数 2
EN

Stack Overflow用户

发布于 2016-12-31 06:31:03

代码语言:javascript
复制
convert -background lightblue -fill blue -font Arial -pointsize 72 label:"Anthony" label.gif

上面的代码在IM 6.9.7.0 Q16 Mac上运行良好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41209277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档