2015-09-29 24 views
1

我对GraphicsMagick的隐蔽命令感到困惑。GraphicsMagick的Convert命令选项的正确索引位置是什么

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

实施例1:

convert [ options ... ] input_file output_file 

根据上述提要,我可以以下列方式执行转换命令:

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

上述命令执行成功。现在,我运行了与选项不同索引位置的相同命令。

实施例2:

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

成功执行上面的例子。以上示例的选项索引位置不同,与大纲不匹配。

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

+1

大纲不正确。应该是“gm convert [options ...] input_file [options ...] output_file”。我们会解决这个问题。 –

回答

3

我担心答案部分是哲学的,部分是民间传说,部分意见和GraphicsMagick的部分灵活性,以及​​部分manpages的僵化。让我解释一下......

要理解答案,您需要区分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]] ... 
相关问题