GraphicsMagick 的 Convert 命令选项的正确索引位置是什么

What is the correct index position of the Convert command's options of GraphicsMagick

我对GraphicsMagick的隐蔽命令感到困惑。

根据文档(http://www.graphicsmagick.org/convert.html),convert命令的概要是:

convert [ options ... ] input_file output_file 

根据上面的提要,我可以通过以下方式执行convert命令:

示例 1:

gm convert -strip -scale x400 inputFile.jpg outputFile.jpg

以上命令执行成功。现在,我 运行 具有不同索引位置的选项的相同命令。

示例 2:

gm convert inputFile.jpg -strip -scale x400 outputFile.jpg

上面的例子执行成功。上面例子的选项的索引位置不同,与提要不符。

我的问题是,哪个例子是正确的?

我担心答案部分是哲学的,部分是民间传说,部分是观点,部分是 GraphicsMagick 的灵活性,部分是联机帮助页的僵化。让我解释一下...

要理解答案,您需要区分 settingsoperators。 @KurtPfeifle 做得很好here,为了完整起见,我将总结如下:

  • 一些参数是 settings - 它们设置并 保留它们的值直到命令结束或改变 。例如,-size 设置在命令行上设置后创建的所有 canvases 的大小。在第一次设置之前,默认canvas大小为1x1,设置后一直保持到命令结束。

  • 一些参数是operators - 它们通常执行一些图像处理,例如阈值处理或转换为灰度。这些对 当前图像列表中的所有图像进行操作

也许一个例子会有所帮助。首先,我们使用-size 设置:

gm convert -background none xc:red -size 5x5 xc:lime xc:blue -size 10x10 xc:magenta +append setting.png

最初,默认大小为 1x1,因此红色 canvas 以 1x1 显示。然后我改变了设置,它保持在 5x5 用于石灰和蓝色 canvases,直到我将它更改为 10x10 用于洋红色。这些是设置,他们为即将到来的图像做准备。

现在,我用 -colorspace 运算符:

做类似的事情
gm convert xc:red xc:lime xc:blue -colorspace gray +append operator.png

并且您看到 -colorspace 运算符已更改图像列表中已有的所有图像,即它们处理之前已添加到列表中的图像。

如果你愿意,你可以简化事情并说"settings apply to all that is to come, and operators apply to all that has gone"。虽然我肯定有反例。

命令行选项的顺序在几年前已经合理化,GraphicsMagick 允许一些灵活性以保留一些向后兼容性。这可能是对您实际问题的最佳解释。

因此,一般来说,您应该尽快在命令行上声明 settings,并根据列表中当前的图像在最有意义的位置应用运算符。

另一个原因是,如果将所有 GraphicsMagick 的组合和排列都放在一个传统的联机帮助页中,将会非常麻烦,甚至难以理解。你能想象吗:

gm convert [[[operators|settings]|[settings|operators]] image] [[settings|operators]|[operators]] ...