为什么 -composite 在错误调用时会忽略第一张图像?

Why does -composite ignore the first image when called incorrectly?

我一直在努力理解 ImageMagick 的图像堆栈。这是我的理解:

无论何时在命令行中引用图像,都会将图像添加到堆栈中。某些运算符可以从堆栈中弹出多个图像并推送结果图像,例如 +append-composite。例如:

convert a.png b.png -composite output.png

正如预期的那样,此复合 b 在 a 之上。

但是当我 运行 这个(我知道这没有意义,但我试图理解这种行为)时:

convert a.png -composite b.png output.png

我得到一张只有 b.png 的图片。 这是为什么? 第一张图片去哪儿了?你不希望这会出错吗,因为复合没有两个图像可以使用?

此外,如果我运行这个,

convert -composite a.png b.png output.png

我得到的结果与 运行 a.png b.png -composite 相同。为什么是这样?你不希望这也会出错吗?

这让我感到困惑,因为我希望格式错误的输入会引发错误,而不是产生意外的输出。使用 ImageMagick 时如何避免此类问题?

我认为这与 ImageMagick 团队希望简化和合理化参数顺序但仍适应使用原始旧参数顺序的人们的愿望有关。

你的第一个例子是,恕我直言,新的和首选的做事方式,加载第一张图片,然后第二张图片,然后用这两张图片做一些事情。

convert a.png b.png -composite output.png

你的第二个和第三个例子之所以有效,是因为 ImageMagick 试图适应一种不合逻辑的,或者可能是老式的使用方式。如果在图像不足时使用运算符(例如 -composite),它会记住这一点,然后在图像足够时应用它。

我写了另一个非常相关的答案 ,可能有助于澄清更多。

有一个很好的解释here