如何在ImageMagick中使用带标题的stdin

从阅读ImageMagick文档的文本来看,我的理解是@-符号读取标准input的内容。

因此,这应该是一个相当直接的呈现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。

在这里输入图像说明

但是在Ubuntu 16.04 LTS上,相同的命令不起作用,使用convert版本:ImageMagick 6.8.9-9 Q16 x86_64 2016-06-01。 实际上,它从字面上呈现stdin操作符。

在这里输入图像说明

我在Google上唯一能够远程查找的问题就是这个问题, 这篇文章的历史可追溯至2015年10月,ImageMagick 6.9.2-5 Beta已经修补以解决类似的问题。

问题 :我没有正确地转义它,在ImageMagick中是否存在真正的问题,或者是我的Linux Distro拿起ImageMagick的历史版本,并且需要从源代码构build ?

许多实验后不久

解决了 …? 在Ubuntu上从源代码构buildImageMagick 7.0.2,上面的命令按照需要工作。 有更好的解决scheme吗?

不需要从源代码构建。 只需将“ – ”替换为“T”即可:

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

在完成转换命令之前,“tee”将首先执行,然后执行“stdin”stdin。

我怀疑这是由于你的policy.xml文件的差异。 最近有关于IM安全漏洞的警告( 这里详细介绍 ),我想你的一个服务器上的policy.xml文件已经变得安全了,而不是其他的。 该文件中受影响的行是:

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

问题所有者提供的澄清:

  • 策略文件的位置是/etc/ImageMagick-6/policy.xml
  • 软件包分发中的默认状态是UN注释掉的。
  • 这里提出的建议是评论一下。
  • 这个解决方案对于问题所有者来说不起作用。 你的旅费可能会改变,

马克进一步澄清:

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

找到policy.xml文件的确切方法是运行以下命令,并意识到ImageMagick希望policy.xml文件与delegates.xmlcoder.xml位于相同的目录中:

  convert -debug configure logo: null: 2>&1 | grep -Ei "Searching|Loading"