簡體   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