我的主管要求我使用PerlMagick,而不是管和使用的ImageMagick的命令行版本(各种不相干的原因),我们的Perl脚本的部分转换。
利用我们现有的接口(裁剪,缩放,保存等),我建立了用户想要的图像上执行的操作列表,构造语句来管,然后执行它。
我想知道的是:
- 被转换从左到右执行的操作? 即我传递的顺序
- 如果我通过了相同的选项会发生什么呢? 难道他们分别进行?
很显然,在其中操作的图像执行的顺序是非常重要的,所以我试图找出如果我能一气呵成(可能获得效率?)执行所有操作,或者如果我将不得不执行分开每个操作。 谢谢
不幸的是,接受了这个问题的答案还没有完成... :-)
三个参数(主要)班
假设,你的ImageMagick的版本是最近的一个,这里是它的一个重要的修改:
你应该3个主要类别的命令行参数区分:
- 图像设置
- 图片运营商
- 图像序列操作符
这三个班都表现不同:
图像设置
因为它出现在命令行上图像设置仍然存在。 它可能会影响到所有的后续处理(而不是以前的处理):
- 处理,诸如读取图像或多个图像中的命令行以后;
- 由下述图像操作者进行处理;
- 处理由写入图像作为输出进行。
图像设置保持有效...
- ...,直至其由相同类型的不同的设置重置或更换,
- ......或者直到命令行终止。
图片运营商
图像操作者施加于(单)图像和被遗忘。 它从图像设置不同,因为它会立即影响图像,因为它出现在命令行上。 (记住:这一直持续到命令行终止,或直到它被重置的图像的设置 。)
如果您需要将相同的图像操作应用到第二图像中的同一命令行,你必须重复,准确的运营商的命令行。
严格地说,在符合的ImageMagick的命令行新的架构,所有的图像运营商应该是指对图像的加载后写。 然而,IM开发商妥协:在向后兼容的利益,像运营商仍然可以出现在加载图像之前 - 那么他们将被应用到提供给他们的第一张图像。
图像序列操作符
的图像序列操作者施加到所有当前加载的图像(和然后被遗忘)。
它不同于简单的图像操作,它不仅影响到一个单一的形象。 (一些运营商才有意义,如果他们的操作有多个图像进行消费:想-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的会自动分配索引号到相应的文件名。
这是调试有很大的帮助(或优化,简化,简化...)复杂的命令设置。
被转换从左到右执行的操作? 即我传递的顺序
是。 如果我采取以下两个例子,这是除了操作顺序相同的,我可以预期基础上,从左到右不同的结果。
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)