转换,括号, - 马赛克和顺序

时间:2013-07-12 18:25:48

标签: imagemagick imagemagick-convert

当我尝试使用-mosaic组合两个图像时,我似乎有两个选择:

$ convert logo: rose: -mosaic result.png
$ convert -mosaic logo: rose: result.png

两者都会产生相同的图像。如果我使用括号,那就不再适用了:

$ convert logo: \( rose: \) -mosaic result.png

仍会产生相同的输出图像,但下一个

$ convert -mosaic logo: \( rose: \) result.png

结果完全不同。

有人可以解释为什么最后的结果有所不同吗?这是convert中的错误还是ImageMagick中的另一个概念我还没有掌握?

我正在使用ImageMagick 6.8.6-2(由Arch Linux打包)

2 个答案:

答案 0 :(得分:0)

括号创建一个子流程,或image stack,允许从父流程中隔离其他图像处理。

$ convert logo: rose: -mosaic result.png

enter image description here

$ convert logo: \( rose: -negate -resize 200% \) -mosaic result.png

enter image description here

命令序列非常重要,因为马赛克需要层加入。以下命令是相同的,因为忽略了-mosaic命令&没有命令在任何子进程上执行。

$ convert logo: rose: result.png
$ convert logo: \( rose: \) result.png
$ convert -mosaic logo: \( rose: \) result.png

答案 1 :(得分:0)

我想我发现了它为什么会这样运作。然而,尽管提供了大量的文档,ImageMagick似乎仍然是一个神秘的科学,因为编织的多样性兼容层。

阅读http://www.imagemagick.org/Usage/basics/#cmdline之后,我想我可以总结以下内容:

  1. ImageMagick 6.x有一个全新的语法,在第一张图像前面放置任何操作符都没有意义。
  2. ImageMagick 6.x尝试在某种程度上模拟旧5.x版本的语法("简单5.x操作,如convert [operator] [input-image] [output-image]应该仍然可行。")
  3. 如果我理解正确,括号不是5.x的一部分。
  4. 因此,断言命令行中括号的存在会以某种方式禁用兼容性模式并不会太过分,这可以解释观察到的行为。
  5. 如果有人读到这个与转换为我的语法有类似的问题,我建议阅读上面的链接,不要停止研究它,直到你完全理解图像列表,图像操作符和图像序列操作符的概念。它不是太复杂,但如果你只是使用试验&错误,你会像我一样,非常难以理解语法。