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 的灵活性,部分是联机帮助页的僵化。让我解释一下...
要理解答案,您需要区分 settings
和 operators
。 @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]] ...
我对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 的灵活性,部分是联机帮助页的僵化。让我解释一下...
要理解答案,您需要区分 settings
和 operators
。 @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]] ...