我对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
以上示例已成功执行。上述示例的选项索引位置不同,与概要不符。
我的问题是,哪个例子是正确的?
答案 0 :(得分:3)
我担心答案部分是哲学的,部分是民间传说,部分是意见,部分灵活的是GraphicsMagick,部分是手册的僵化。让我解释一下......
要了解答案,您需要区分settings
和operators
。 @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
最初,默认大小为1x1,因此红色画布以1x1出现。然后我更改了设置,它保持在5x5
的石灰和蓝色画布,直到我将它改为10x10的洋红色画布。这些都是设置,他们为即将到来的图像设置了一些东西。
现在,我对-colorspace
运算符做了类似的事情:
gm convert xc:red xc:lime xc:blue -colorspace gray +append operator.png
您看到-colorspace
运算符已更改图像列表中已有的所有图像,即它们处理之前已添加到列表中的图像。
如果你愿意,你可以简化一些事情,并说“设置适用于所有即将发生的事情,并且运营商适用于所有已经过去的事情。虽然我确信有反例。
几年前,命令行选项的顺序合理化,GraphicsMagick允许一些灵活性来保留一些向后兼容性。这可能是您实际问题的最佳解释。
因此,一般情况下,您应该尽快在命令行上声明settings
,并在最有意义的点应用运算符,具体取决于列表中当前的图像。
另一个原因是,如果将所有GraphicsMagick组合和排列放在传统的联机帮助页中,那将是非常麻烦的,甚至是不可理解的。你能想象:
gm convert [[[operators|settings]|[settings|operators]] image] [[settings|operators]|[operators]] ...