[英]ImageMagick Command-Line Option Order (and Categories of Command-Line Parameters)
我的主管要求我將使用PerlMagick的Perl腳本部分轉換為管道並使用ImageMagick的命令行版本(出於各種不相關的原因)。
使用我們現有的界面(裁剪,縮放,保存等),我正在建立一個用戶想要對圖像執行的操作列表,構建語句到管道然后執行它。
我想知道的是:
顯然,對圖像執行操作的順序是至關重要的,所以如果我可以一次執行所有操作(可能獲得效率?)或者如果我將不得不執行,我正在努力解決這個問題。每個操作分開。 謝謝
不幸的是,這個問題的接受答案還沒有完成...... :-)
假設您的ImageMagick版本是最近版本,這是對它的一個重要修正:
你應該區分3大類命令行參數:
這三個類的行為有所不同:
圖像設置
圖像設置在命令行中顯示時仍然存在。 它可能會影響所有后續處理(但不會影響以前的處理):
圖像設置保持有效...
圖像運算符
圖像操作符應用於(單個)圖像並被遺忘。 它與圖像設置不同,因為它會立即影響圖像,因為它出現在命令行上。 (請記住:圖像設置一直持續到命令行終止,或直到它被重置。)
如果需要將同一圖像操作符應用於同一命令行中的第二個圖像,則必須在命令行上重復該精確操作符。
嚴格來說,根據ImageMagick命令行的新架構,所有圖像操作符都應在加載圖像后編寫。 然而,IM開發人員妥協:為了向后兼容,圖像操作員仍然可以在加載圖像之前出現 - 然后它們將應用於他們可用的第一個圖像。
圖像序列運算符
圖像序列運算符應用於所有當前加載的圖像(然后被遺忘)。
它與簡單的圖像操作符的不同之處在於它不僅影響單個圖像。 (一些運營商才有意義,如果他們的操作有多個圖像進行消費:想-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.