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

时间:2015-09-29 04:42:45

标签: 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

以上示例已成功执行。上述示例的选项索引位置不同,与概要不符。

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

1 个答案:

答案 0 :(得分:3)

我担心答案部分是哲学的,部分是民间传说,部分是意见,部分灵活的是GraphicsMagick,部分是手册的僵化。让我解释一下......

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

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

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

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

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

enter image description here

最初,默认大小为1x1,因此红色画布以1x1出现。然后我更改了设置,它保持在5x5的石灰和蓝色画布,直到我将它改为10x10的洋红色画布。这些都是设置,他们为即将到来的图像设置了一些东西。

现在,我对-colorspace 运算符做了类似的事情:

gm convert xc:red xc:lime xc:blue -colorspace gray +append operator.png

enter image description here

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

如果你愿意,你可以简化一些事情,并说“设置适用于所有即将发生的事情,并且运营商适用于所有已经过去的事情。虽然我确信有反例。

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

因此,一般情况下,您应该尽快在命令行上声明settings,并在最有意义的点应用运算符,具体取决于列表中当前的图像。

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

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