ImageMagick 使用範例
|
|
|||||||||||||||
![]() |
|
|
![]() ![]() |
提示、技巧或額外資訊 | ![]() ![]() |
給進階使用者的資訊 | ![]() ![]() |
舊版本警告 |
ImageMagick 範例 - 簡介
什麼是 ImageMagick?毫無保留的摘要
ImageMagick 專為影像批次處理而設計。也就是說,它允許您在腳本(shell、DOS、Perl、PHP 等)中組合影像處理操作,以便將操作應用於多個影像,或作為其他工具的子系統,例如 Web 應用程式、影片處理工具、全景圖產生器等。*它不是 GUI 影像編輯器*。
ImageMagick 首先是一個影像轉換器。這是它最初設計的目的。也就是說,它可以將幾乎任何影像格式(如果不能,請告訴我們)的影像轉換為任何其他影像格式。
但它也是一個*影像處理演算法*的函式庫。這些演算法可以透過命令列和 shell/DOS 腳本(這些範例頁面將會演示)存取,也可以透過多種程式語言存取,例如 C、C++、Perl、Ruby、PHP 等。請參閱:ImageMagick API。
速度從來不是 IM 的主要特色,IM 更強調其產生影像的品質。這並不是說它不能在合理的時間內轉換影像。只是它不是快到不可思議。因此,IM 在執行某些處理操作時可能會很慢,尤其是在嘗試將影像壓縮為功能有限的影像格式時。
ImageMagick 主要處理以「像素矩形陣列」形式存在的圖像,通常稱為「點陣圖」。它可以處理像 Postscript 或 PDF 之類的「向量」圖像格式,但代價是在加載時將這些圖像轉換為點陣圖,並在保存時圍繞點陣圖生成一個向量圖像包裝器。因此,使用默認設置時,向量圖像的處理效果通常很差。但是,可以使用特定選項來改善這種情況。請參閱:關於向量圖像格式的說明。
關於這些 ImageMagick 使用範例
這些頁面是從我於 1993 年開始編寫的 ImageMagick 提示和技巧彙編 頁面發展而來,並延續了該頁面的內容,當時這個新奇的全球資訊網也開始嶄露頭角。關於 IM 的許多方面的資訊,以及這些頁面中未包含的註釋,仍然存在於該文件中。但是,雖然本頁面的設計目的是供您查看,但提示和技巧文件僅供我自己學習。因此,它在某些地方可能含糊不清或雜亂無章。歡迎您查看、學習並對其發表評論。
其他範例則取自或改編自 IM 論壇 上對用戶問題的解答,或作為解決各種問題的方案提供給我。
我期待其他 IM 用戶的建議和電子郵件。這些電子郵件通常會帶來這些範例頁面的改進和擴展。
命令列環境
所有範例都寫成在 UNIX 上使用,特別是使用 BASH 腳本的 GNU/Linux 系統。因此,某些範例使用 shell 的「for-do」迴圈。大多數範例在行尾使用反斜線「\
」將該命令延續到下一行。較長的命令會分成幾行,以便更清楚地顯示正在應用的步驟。
但是,您仍然可以在 PC Windows 批次檔 中使用這些範例,只需對某些字元的處理方式稍作更改。只需稍作調整,這些範例也可以直接從 PHP 腳本 中的「system
」呼叫運行。
有關在這些替代環境中使用 ImageMagick 命令的更多資訊,請參閱Windows 使用方式和API 和腳本。歡迎提供貢獻和測試範例。
PerlMagick 和其他 API
您也應該能夠調整任何這些範例,以便從 Perl、C、C++、Ruby、PHP 等語言使用 IM API。我建議先在命令列上試驗,直到您掌握了訣竅,然後再將操作轉換為您正在使用的特定 API。
儘管 IM 6 版的情況已大幅改善,但命令列實際上一次只能處理單一圖像序列。但是,API 並沒有這個限制,它允許您分別或一起操作多個圖像序列,以執行更複雜的操作。這種能力使得使用 IM API 實現這些範例變得更加簡單,並且無需像許多命令列範例那樣將圖像保存為臨時文件。使用 API 時,只有永久性和半永久性圖像才需要保存到磁碟。
總之,讓這些範例頁面為您提供一個起點,讓您了解 ImageMagick 的可能性。然後,在使用腳本和 API 程式碼進行編碼之前,先在命令列上構思您想要執行的操作,因為在腳本和 API 程式碼中進行大量更改比較困難。
我也建議您在 API 程式碼中加入大量的註解,如果可能的話,加入您嘗試執行的命令列等效指令。這樣一來,您就可以使用命令列檢查結果並進行比較。這讓您可以在日後除錯遇到的問題,尤其是在 Core ImageMagick 程式庫的影像處理功能有所改進時。
下載輸入影像和結果
我會盡可能使用 IM 內建的影像(例如「logo:
」或「rose:
」)作為 IM 範例指令的輸入影像,或使用 IM 指令產生輸入影像。我也經常在後續的範例中重複使用先前指令的輸出。因此,您通常不需要下載任何「測試」影像即可自行嘗試這些範例。
然而,這種產生的或內建的影像並不總是那麼方便。因此,當我確實使用外部影像時,我傾向於在該章節的後續範例中重複使用該輸入影像或先前範例的結果。
有時會顯示原始來源影像,或者對於較大的影像,會提供來源影像的連結。更常見的情況是,只會顯示最終產生的影像,因為輸入是眾所周知或顯而易見的。
幾乎所有顯示的 IM 範例指令都是在它們出現的相同網路目錄中執行的。也就是說,您看到的指令就是實際用來產生影像的指令。因此,您可以修改頁面的 URL 來下載或檢視範例所使用的輸入影像。外部來源影像的額外副本也已放置在「images」和「img_photos」子目錄中。另請參閱這些影像的精美相片索引範例。
如果範例產生了文字輸出或影像資訊,則會將其儲存到文字檔案中,並產生其影像以顯示在網頁上。選擇文字輸出影像將會連結到指令實際文字輸出的副本。
在所有這些範例中,選擇輸出影像應該可以讓您下載範例指令實際建立的影像。但請注意,並非所有瀏覽器都瞭解所有使用的影像格式。
外部影像來源
順帶一提,這些範例中使用的大部分來源影像都來自Anthony's Icon Library,特別是該程式庫的背景圖案、大型剪貼畫和龍部分。(我喜歡龍!)。備註:這些頁面可能會離線,因為網站正在慢慢地遷移到新的伺服器。
這個程式庫實際上早於 WWW。我是在 1991 年建立它的,因為當時缺乏可用於 X Window System 的優良、乾淨的圖示影像。WWW 的出現當然改變了這一點,但我最初的程式庫仍然存在,並且仍然可以作為影像來源,儘管它沒有在積極地發展。
一些特定的影像和較大的影像是由特定範例的作者提供的。這些範例的作者會列在貢獻者章節或頁面底部。
如果您正在尋找特定的影像,我建議您使用Google 圖片搜尋(或類似工具)來尋找合適的影像。當然,您可以使用 IM 轉換或調整這些影像的大小,以供您自己使用。但是,如果您打算將這些影像用於商業用途,則應注意版權問題。
網頁上的 PNG 影像
![[IM Output]](images/test.png)
在許多範例中,我使用 PNG 格式的影像,例如這段文字右側顯示的影像。PNG 影像格式支援具有半透明像素的影像,這是其他少數影像格式所提供的功能。它也是一種非常容易理解的影像格式,因此,現今的大多數影像程式和網頁瀏覽器都可以使用它。
然而,有些網頁瀏覽器無法正確處理透明 PNG 圖像(最值得注意的是 Microsoft Internet Explorer v6)。因此,我通常在網頁上使用 JPEG 和 GIF 格式的圖像,並且僅在生成具有半透明像素的圖像或後續範例需要精確顏色時才使用 PNG 格式。
為了讓 IE v6 瀏覽器能夠顯示 PNG 圖像,我使用了一個特殊的「樣式表」,它使用了複雜的 JavaScript。有關這方面的資訊,請參閱IE 的 PNG 透明度。從技術上講,這只是 IE 的問題,而不是 ImageMagick 的問題。
在螢幕上顯示圖像在螢幕上顯示圖像時,也可能會出現顯示問題。因此,我建議使用如下命令在圖像下方平鋪「
|
![]() |
上例中顯示的圖像是使用 Shell 腳本生成的特殊 PNG 格式測試圖像。通常,該命令會將結果輸出到顯示器,而不是像這樣輸出到網頁上。
如果仔細觀察,您可以透過半透明顏色看到棋盤格圖案。但是,整個圖像完全不透明。因此,這種技術應該適用於所有顯示器、網頁瀏覽器和圖像查看器。
從 IM v6.0.2 開始,「magick display
」程式會自動執行類似這樣的操作。但是,它似乎無法以這種方式處理使用顏色表(即 GIF)的圖像。使用「x:
」輸出圖像格式(如上所示)會導致圖像直接顯示在螢幕上,而無需保存圖像。有關更多資訊,請參閱顯示輸出顯示。
字體使用
我在這些範例中使用的字體來自多年來我發現並保存供自己使用的一小部分 TrueType 字體。其中一些字體受版權保護,因此我無法在網路上發佈它們。
但是,歡迎您替換您可用的其他字體。這些範例應該可以使用您系統上可用的任何適當字體(可能需要對圖像大小進行一些更改)。Microsoft 的「Arial」字體,甚至「Times-BoldItalic」,應該適用於大多數系統。
要查看您的 IM 版本當前可用的字體,請執行以下命令...
magick -list font |
警告:如果找不到請求的字體,ImageMagick 過去常常靜默地替換為預設字體,通常是 Arial 或 Times。它仍然會這樣做,但現在會發出警告。因此,請事先測試字體,以確保它是您想要的字體,而不是預設字體。
在我的 Linux 系統上,我使用一個特殊的 Perl 腳本「imagick_type_gen
」來生成一個名為「type.xml
」的檔案,並將其保存在我的主目錄的「.magick
」子目錄中。ImageMagick 使用該檔案(其中包含 XML 格式的字體清單)來查找字體。該腳本會「locate
」(如果剛添加了新字體,請先執行「updatedb
」)並描述系統上可用的所有字體。使用此設定,我只需要指定要使用的字體的名稱,而不需要指定特定字體檔案的完整路徑。
|
![]() ![]() |
在 IM v6.1.2-3 之前,「type.xml 」檔案名為「type.mgk 」。如果您使用的是舊版 IM。 |
這些 IM 範例中使用的字體列在範例字體蒙太奇範例中。我個人最喜歡的是 Candice,因此它被大量使用。
![]() ![]() |
如果您也喜歡「Candice 」字體或我使用的任何其他字體,請從免費字體或1001 Fonts .com獲取它們。 |
範例頁面更新
這些範例頁面處於持續改進的循環中。一般來說,當我的興趣集中在其他事情上時,我會長時間停止更新這些頁面。
通常,這些範例會使用最新測試版的 IM 重新建構,讓我可以在正式發佈之前,查看每個 IM 版本中可能出現的變更和錯誤。但是,顯示的範例圖像是指定 IM 命令在我的系統上產生的結果。如果您得到的結果不同,則可能是您的 IM 版本過舊(有舊的錯誤),或者安裝不正確。
請注意,透過電子郵件與我聯繫,或在 討論區 上討論 ImageMagick 的某些方面,通常會導致新增範例或整個新章節。討論越多,範例就越好。
如果您正在使用 IM 進行任何有趣的操作,請分享,並允許我向 IM 社群的其他成員提供您技術的範例。IM 使用方面的一些最大進展來自於像您一樣的使用者。
特別感謝
特別感謝 Cristy,他孜孜不倦地花了數月的時間升級、修復錯誤,並忍受我那些天馬行空的建議... 特別是關於我對命令列處理、括號、影像序列運算子和 GIF 動畫處理的主要建議。
他做了一項了不起的工作,使版本 7 成為現有最好、最先進的命令列影像處理程式。雖然大多數使用者不會對此表示感謝,但我確實感謝他為 IM 付出的努力。
我還要感謝 Gabe Schaffer,他在討論 JPEG 格式和程式庫、仿射矩陣運算子和一般的 Magick 向量圖形 方面提供了很多幫助。
還要感謝 Glenn Randers-Pehrson,他編寫了 PNG 編碼器模組,並對色彩量化和抖動很感興趣。他是第一個在 IM 中新增「半色調」抖動的人,我後來對其進行了修改和擴展,在有序抖動設定檔中新增了新的抖動演算法。
最後,我要感謝在 IM 使用者論壇 上潛水的廣大使用者,他們提出問題、建議和解決方案。現在,許多人的名字都出現在 IM 範例中,作為想法和建議的貢獻者。
我還要感謝那些經常在論壇上回答問題的人,例如「Bonzo」,以及他的網站 RubbleWebs,該網站詳細介紹了如何從 PHP 指令碼中使用 IM 命令。還有「scri8e」和他的網站 Moons Stars,用於處理閃光和星星效果。還要感謝 Pete「el_supremo」
特別感謝 Fred Weinhaus,他是一位影像處理領域的早期研究人員,在 通用影像扭曲運算子 的初始實作中提供了很大的幫助。您可以在 Fred 的 ImageMagick 網站 上看到 Fred 的 ImageMagick 指令碼,這些指令碼通常作為未來 IM 新增功能的概念驗證。
還要感謝數位影像處理專家 Nicolas Robidoux,他重新設計了 橢圓加權平均重新取樣,大大改善了 通用影像扭曲 的輸出結果。
最後要感謝 ImageMagick 的眾多使用者,他們允許其他人在論壇或網路上看到他們在某些專案中使用的 IM 命令。你們都值得讚揚,因為你們願意並且公開地分享你們的發現。
好了,「等等,等等」。 去看看一些範例吧。