ImageMagick的命令行选项顺序(和命令行参数的分类)ImageMagick的命令行选项顺序(

2019-05-12 03:42发布

我的主管要求我使用PerlMagick,而不是管和使用的ImageMagick的命令行版本(各种不相干的原因),我们的Perl脚本的部分转换。

利用我们现有的接口(裁剪,缩放,保存等),我建立了用户想要的图像上执行的操作列表,构造语句来管,然后执行它。

我想知道的是:

  1. 被转换从左到右执行的操作? 即我传递的顺序
  2. 如果我通过了相同的选项会发生什么呢? 难道他们分别进行?

很显然,在其中操作的图像执行的顺序是非常重要的,所以我试图找出如果我能一气呵成(可能获得效率?)执行所有操作,或者如果我将不得不执行分开每个操作。 谢谢

Answer 1:

不幸的是,接受了这个问题的答案还没有完成... :-)

三个参数(主要)班

假设,你的ImageMagick的版本是最近的一个,这里是它的一个重要的修改:

  • 你应该3个主要类别的命令行参数区分:

    1. 图像设置
    2. 图片运营商
    3. 图像序列操作符

这三个班都表现不同:

  1. 图像设置

    1. 因为它出现在命令行上图像设置仍然存在。 它可能会影响到所有的后续处理(而不是以前的处理):

      • 处理,诸如读取图像或多个图像中的命令行以后;
      • 由下述图像操作者进行处理;
      • 处理由写入图像作为输出进行。
    2. 图像设置保持有效...

      • ...,直至其由相同类型的不同的设置重置或更换,
      • ......或者直到命令行终止。
  2. 图片运营商

    1. 图像操作者施加于(单)图像和被遗忘。 它从图像设置不同,因为它会立即影响图像,因为它出现在命令行上。 (记住:这一直持续到命令行终止,或直到它被重置的图像的设置 。)

    2. 如果您需要将相同的图像操作应用到第二图像中的同一命令行,你必须重复,准确的运营商的命令行。

    3. 严格地说,在符合的ImageMagick的命令行新的架构,所有的图像运营商应该是指对图像的加载写。 然而,IM开发商妥协:在向后兼容的利益,像运营商仍然可以出现在加载图像之前 - 那么他们将被应用到提供给他们的第一张图像。

  3. 图像序列操作符

    1. 的图像序列操作者施加到所有当前加载的图像(和然后被遗忘)。

    2. 它不同于简单的图像操作,它不仅影响到一个单一的形象。 (一些运营商才有意义,如果他们的操作有多个图像进行消费:想-append-combine-composite-morph ...)

从你已经可以断定上述原则:在命令行参数的顺序是在大多数情况下显著。 (如果你知道他们在做什么,你还知道哪些订单需要使用应用它们。)

(为完整起见,我要补充:还有另一类miscellanious,其他参数,它们不属于任何上述列出的种类中的思考。 -debug-verbose-version 。)

不幸的是,3类IM命令行PARAMATERS之间的明显区别是没有(否则很精明)IM用户之间的共同知识 。 因此,它的优点,以获得更多的曝光。

这种明显的分化与ImageMagick的主要版本6中引入之前,它是更加令人困惑:一些设置语义语境与变化,也与他们的顺序给予。 从复杂的命令结果并不总是可以预测的,有时令人惊讶的和不合逻辑的。 (现在,他们可能会令人吃惊太的时候,但是当你仔细看他们,理解了上面,他们总是很符合逻辑的。)

哪个是哪个?!?

当你不知道,一个特定的参数属于哪个类,运行

 convert -help | less

搜索您的参数。 一旦发现,滚动回:那么你应该找到“标题”下,它出现。 现在,你可以确信其类型是: 图像设置影像操作员图像序列运营商 -和兼顾一下我以上所说的这些。

一些更多的建议

如果你的工作是从港口到PerlMagick您的CLI界面ImageMagick的,你应该知道另外一个绝招:可以插入

 +write output-destination

命令行(甚至多次)上的任何位置。 然后这将写出在其当前处理状态的当前加载的图像(或当前加载的图像序列),以给定的输出目的地。 (把它看成是作为类似的东西 tee - 壳/终端使用,其中命令重新定向的副本 <stdout> 到文件中。)输出目的地可以是一个文件,或show:或任何其他适用于IM输出。 写入输出后,完整的命令的处理将继续。

当然,它才有意义插入+write第一(或任何其他) 的图像运算符后-否则当前图像列表将不会改变。

如果有多个输出图像(因为当前图像列表由一个以上的图像),则ImageMagick的会自动分配索引号到相应的文件名。

这是调试有很大的帮助(或优化,简化,简化...)复杂的命令设置。



Answer 2:

被转换从左到右执行的操作? 即我传递的顺序

是。 如果我采取以下两个例子,这是除了操作顺序相同的,我可以预期基础上,从左到右不同的结果。

convert rose: -sample 300% -wave 5x10 rose_post_wave.png
convert rose: -wave 5x10 -sample 300% rose_pre_wave.png

您可以将图像后看到的波动作冲击的影响,或图像的采样之前。

如果我通过了相同的选项会发生什么呢? 难道他们分别进行?

该会执行两次。 没有特殊的锁,或自动操作计数存在。

convert rose: -blur 0.5x0.5 -scale 300% rose_blur1.png
convert rose: -blur 0.5x0.5 -blur 0.5x0.5 -scale 300% rose_blur2.png



文章来源: ImageMagick Command-Line Option Order (and Categories of Command-Line Parameters)