繁体   English   中英

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

[英]ImageMagick Command-Line Option Order (and Categories of Command-Line Parameters)

我的主管要求我将使用PerlMagick的Perl脚本部分转换为管道并使用ImageMagick的命令行版本(出于各种不相关的原因)。

使用我们现有的界面(裁剪,缩放,保存等),我正在建立一个用户想要对图像执行的操作列表,构建语句到管道然后执行它。

我想知道的是:

  1. 转换操作是从左到右执行的吗? 即我传递的顺序
  2. 如果我两次通过相同的选项会怎样? 它们是分开进行的吗?

显然,对图像执行操作的顺序是至关重要的,所以如果我可以一次执行所有操作(可能获得效率?)或者如果我将不得不执行,我正在努力解决这个问题。每个操作分开。 谢谢

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

三个(主要)类参数

假设您的ImageMagick版本是最近版本,这是对它的一个重要修正:

  • 你应该区分3大类命令行参数:

    1. 图像设置
    2. 图像运算符
    3. 图像序列运算符

这三个类的行为有所不同:

  1. 图像设置

    1. 图像设置在命令行中显示时仍然存在。 它可能会影响所有后续处理(但不会影响以前的处理):

      • 稍后在命令行中处理诸如读取图像或更多图像;
      • 由以下图像操作员完成的处理;
      • 通过写入图像作为输出进行的处理。
    2. 图像设置保持有效...

      • ...要么重置,要么用相同类型的不同设置替换,
      • ...或直到命令行终止。
  2. 图像运算符

    1. 图像操作符应用于(单个)图像并被遗忘。 它与图像设置不同,因为它会立即影响图像,因为它出现在命令行上。 (请记住:图像设置一直持续到命令行终止,或直到它被重置。)

    2. 如果需要将同一图像操作符应用于同一命令行中的第二个图像,则必须在命令行上重复该精确操作符。

    3. 严格来说,根据ImageMagick命令行的新架构,所有图像操作符都应在加载图像编写。 然而,IM开发人员妥协:为了向后兼容,图像操作员仍然可以在加载图像之前出现 - 然后它们将应用于他们可用的第一个图像。

  3. 图像序列运算符

    1. 图像序列运算符应用于所有当前加载的图像(然后被遗忘)。

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

从上述原则可以得出结论:在大多数情况下,命令行参数的顺序很重要。 (如果你知道他们做了什么,你也知道你需要使用哪个顺序来应用它们。)

(为了完整起见,我应该补充:还有另一类杂项其他参数,它们不属于上面列出的任何类别。想想-debug-verbose-version 。)

不幸的是,3类IM命令行参数之间的明显区别还不是(在其他非常精明的)IM用户中的常识 因此,获得更多曝光是值得的。

ImageMagick主要版本6引入了这种明显的区别。之前,它更令人困惑:某些设置的语义随着上下文而改变,也随着它们的顺序而改变。 复杂命令的结果并不总是可预测的,有时令人惊讶和不合逻辑。 (现在它们有时候可能会令人惊讶,但是当你仔细观察它们时,理解上面的内容,它们总是很合乎逻辑。)

哪个是哪个?!?

每当您不确定某个特定参数属于哪个类时,运行

 convert -help | less

搜索您的参数。 找到后,向后滚动:然后您应该找到它出现的“标题”。 现在您可以确定它是哪种类型: 图像设置图像操作员图像序列操作员 - 并考虑我上面对他们所说的内容。

一些更多的建议

如果你的工作是将你的ImageMagick接口从PerlMagick移植到CLI,你应该知道另一个技巧:你可以插入

 +write output-destination

在命令行的任何地方(甚至多次)。 然后,这将以当前处理的状态将当前加载的图像(或当前加载的图像序列)写出到给定的输出目的地。 (将其视为与 tee 相似的东西 - 用于shell /终端使用的命令,它将 <stdout> 的副本 <stdout> 到文件中。)输出目标可以是文件,或show:或其他任何对IM有效的内容输出。 写入输出后,将继续处理完整命令。

当然,仅在第一个(或任何其他) 图像操作符之后插入+write才有意义 - 否则当前图像列表将不会更改。

如果存在多个输出图像(因为当前图像列表包含多个图像),则ImageMagick将自动为相应的文件名分配索引编号。

这对于调试(或优化,简化,简化......)复杂的命令设置非常有帮助。

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

是。 如果我采用以下两个例子,除了操作顺序之外是相同的,我可以期待基于从左到右的不同结果。

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

一个模糊两个模糊

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM