1

当我尝试使用 组合两个图像-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

有完全不同的结果。

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

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

4

2 回答 2

1

我想我发现了它为什么会这样工作。然而,尽管有大量可用的文档,但 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. 因此,得出命令行上存在括号会以某种方式禁用兼容模式的结论并不牵强,这可以解释观察到的行为。

如果有人读到这里对 convert to mine 的语法有类似的问题,我建议你阅读上面的链接,在你完全理解图像列表、图像运算符和图像序列运算符的概念之前不要停止学习。它并不太复杂,但如果你只是使用试错法,你会和我一样,很难理解语法。

于 2013-07-14T08:12:45.410 回答
0

括号创建一个子进程或图像堆栈,它允许将额外的图像处理与父进程隔离。

$ convert logo: rose: -mosaic result.png

在此处输入图像描述

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

在此处输入图像描述

命令的顺序可能很重要,因为马赛克期望图层加入。以下命令是相同的,因为 -mosaic 命令被忽略并且没有命令在任何子进程上执行。

$ convert logo: rose: result.png
$ convert logo: \( rose: \) result.png
$ convert -mosaic logo: \( rose: \) result.png
于 2013-07-13T16:12:33.007 回答