如何在ImageMagick中使用带标题的标准输入

时间:2016-06-22 03:21:06

标签: linux bash ubuntu imagemagick imagemagick-convert

我从阅读ImageMagick documentation有关文本的理解是@-符号读取标准输入的内容。

因此,这应该是一种非常直接的渲染Hello World的方法。

printf "Hello\nWorld" | 
convert \
  -size 1280x100 \
  -background '#0000FF10' \
  -density 90 \
  -gravity Center \
  -fill black \
  -font Helvetica \
  caption:@- \
  test.png

在OS X 10.11.5上通过HomeBrew,使用convert版本:ImageMagick 6.9.4-3 Q16 x86_64 2016-05-20。

enter image description here

但是在Ubuntu 16.04 LTS上,相同的命令不起作用,使用convert版本:ImageMagick 6.8.9-9 Q16 x86_64 2016-06-01。实际上,它实际上是渲染stdin算子。

enter image description here

我唯一能够在Google上远程查看这个问题的问题是this article,可追溯到2015年10月,其中修补了ImageMagick 6.9.2-5 Beta修复类似问题。

问题:我没有正确地逃避它,是否在ImageMagick中确实存在问题,或者我的Linux发行版是否收到了带有错误的ImageMagick的历史版本,我需要{{3} }?

很多实验后

已解决...?在Ubuntu框中从源代码构建了ImageMagick 7.0.2,并且上述命令可以根据需要运行。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

无需从源代码构建。只需用“`tee`”替换@ - :

printf "Hello\nWorld" | 
convert \
  -size 1280x100 \
  -background '#0000FF10' \
  -density 90 \
  -gravity Center \
  -fill black \
  -font Helvetica \
  caption:"`tee`" \
  test.png

`tee`将在完成convert命令之前先执行'process'stdin。

答案 1 :(得分:0)

我怀疑这取决于policy.xml文件中的差异。最近有关于IM安全漏洞的警告(detailed here),我猜你的一台服务器上的policy.xml文件已经安全而不是另一台。该文件中受影响的行是:

<!-- <policy domain="path" rights="none" pattern="@*" /> -->

问题所有者提供的澄清:

  • 政策文件的位置为/etc/ImageMagick-6/policy.xml
  • 程序包分发中的默认状态为UNcommented out。
  • 此处提出的建议是对其进行评论。
  • 此解决方案对问题所有者不起作用;你的里程可能会有所不同,

Mark进一步澄清:

policy.xml文件的位置并不总是/etc/ImageMagick-6,在不同的系统上是不同的 - 例如在OS X上它位于/usr/local/Cellar/imagemagick...下。

找到policy.xml文件的可靠方法是运行以下命令并意识到ImageMagick希望policy.xml文件与delegates.xml和{{1}在同一目录中}}:

coder.xml