ImageMagick 範例 --
蒙太奇,圖像陣列
- 索引
-
ImageMagick 範例 前言與索引
-
蒙太奇,介紹與概述
-
蒙太奇設定
-
圖像目錄索引
- HTML 縮略圖圖像映射(基本索引映射)
- 使用 JPEG 圖像的較小 HTML 索引映射
- 視覺索引(非蒙太奇解決方案)
- 拍立得照片蒙太奇(花式索引映射)
-
使用蒙太奇的特殊技巧
magick montage
」的最初用途是生成圖像縮略圖表,即參考大型圖像集(尤其是照片)的縮略圖。 雖然它仍然可以用於該目的,但它也可以做更多的事情。 本頁將探討您可以使用蒙太奇做些什麼,以及如何將其用於您自己的圖像。蒙太奇,介紹
「magick montage
」命令旨在生成縮略圖陣列。 類似於大型圖像集的樣片。 沒有選項的默認「magick montage
」非常簡單,包含相當大的方形,沒有邊框、標籤或陰影。
幾何 - 圖塊大小和圖像調整大小
「-geometry
」設定是「magick montage
」最重要的控制項。它定義了個別縮圖的大小,以及它們之間的間距。「geometry」的大小部分被用作調整大小運算子的參數,包括其所有特殊用途標誌。選項的位置部分被解釋為要在圖像周圍留下的邊框空間量,因此將其設為較小,將使圖像之間的間隙變小。預設的「-geometry
」設定為「120x120>+4+3
」,這表示將任何給定的圖像放入大小為 120x120 像素的方框中。如果圖像較大,則縮小它,但不要調整較小圖像的大小(根據僅縮小較大圖像(「>」)標誌)。然後,將「tile」大小設定為所有調整大小後的圖像和實際指定大小的最大尺寸。這意味著您永遠不會獲得小於指定「-geometry
」大小的「tile」大小。您可以透過修改「-geometry
」預設值來移除先前範例空間中巨大的「tile」大小。例如,透過移除「大小」組件,將不會調整任何圖像的大小,並且「tile」大小將設定為所有給定圖像的最大尺寸。例如,在這裡,我要求 montage 使用給定的最大圖像進行拼接,並且「tile」之間的間隙很小。當所有輸入圖像都很小且大小大致相同時,這是非常典型的設定。例如,在這裡,我將一張圖像替換為更大的「logo」圖像,但將調整大小設定設定為「48x48
」以調整較小和較大圖像的大小。
magick montage balloon.gif medical.gif present.gif logo: \ -geometry 48x48+2+2 montage_geom_size.jpg |
![[IM Output]](montage_geom_size.jpg)
magick montage balloon.gif medical.gif present.gif logo: \ -geometry 48x48\>+2+2 montage_geom_larger.jpg |
![[IM Output]](montage_geom_larger.jpg)
1x1<
」,它告訴 IM 僅將較小的圖像調整為給定大小。由於沒有圖像可以小於 1 個像素,因此不會調整任何圖像的大小。因此,「tile」大小將再次是頁面上所有圖像的最大尺寸。請參閱零幾何,需要注意,以瞭解您可能想要這樣做的原因。幾何 - 圖塊間距
「-geometry
」設定的位置部分將透過在附加它們在一起之前在「tile」周圍添加這些尺寸的邊框來增加個別「tile」之間的空間。這意味著對於「-geometry
」的預設設定「+4+3
」,「tile」將與最終圖像的左右邊緣相距 4 個像素,並且在「tile」之間將具有 8 個像素(給定大小的兩倍)的水平間距。垂直間距也是如此。請注意,當所有圖像都調整大小時(倒數第二個範例),「tile」之間的空間是如何是邊緣周圍空間的兩倍。圖塊佈局控制
「magick montage
」中的下一個最重要的選項是「-tile
」設定。這告訴 montage 您希望如何將拼接圖像佈置在最終結果上的限制。在 ImageMagick 版本 6 中,當您沒有提供「-tile
」提示時,「magick montage
」將對如何最佳地拼接給定數量的圖像做出有根據的猜測。但是,它確實假設正在拼接的圖像是大致方形的,因為它在決定要使用的拼接時不會考慮圖像的縱橫比。
magick montage font_1.gif -geometry 16x16+1+1 tile_1.gif magick montage font_[12].gif -geometry 16x16+1+1 tile_2.gif magick montage font_[123].gif -geometry 16x16+1+1 tile_3.gif magick montage font_[1-4].gif -geometry 16x16+1+1 tile_4.gif magick montage font_[1-5].gif -geometry 16x16+1+1 tile_5.gif magick montage font_[1-6].gif -geometry 16x16+1+1 tile_6.gif magick montage font_[1-7].gif -geometry 16x16+1+1 tile_7.gif magick montage font_[1-8].gif -geometry 16x16+1+1 tile_8.gif magick montage font_[1-9].gif -geometry 16x16+1+1 tile_9.gif magick montage font_[0-9].gif -geometry 16x16+1+1 tile_0.gif |
![[IM Output]](tile_1.gif)
![[IM Output]](tile_2.gif)
![[IM Output]](tile_3.gif)
![[IM Output]](tile_4.gif)
![[IM Output]](tile_5.gif)
![[IM Output]](tile_6.gif)
![[IM Output]](tile_7.gif)
![[IM Output]](tile_8.gif)
![[IM Output]](tile_9.gif)
![[IM Output]](tile_0.gif)
![]() ![]() |
奇怪的 "[1-5] " 語法是 UNIX shell 的簡寫,它會被展開成一個檔案名稱列表。"magick montage " 命令本身不會看到這些字元,只會看到產生的檔案列表。 |
-tile
" 設定。以下是一個表格,顯示輸入影像的數量和 IM 將用於排列這些影像的 tile 設定。
|
|
|
-tile
" 設定,montage 將始終建立一個足夠大的影像來容納那麼多「tile」。
magick montage font_[1-7].gif -tile 9x1 -geometry 16x16+1+1 tile_9x1.gif magick montage font_[1-7].gif -tile 4x3 -geometry 16x16+1+1 tile_4x3.gif magick montage font_[1-7].gif -tile 3x3 -geometry 16x16+1+1 tile_3x3.gif magick montage font_1.gif -tile 2x3 -geometry 16x16+1+1 tile_2x3.gif |
![[IM Output]](tile_9x1.gif)
![[IM Output]](tile_4x3.gif)
![[IM Output]](tile_3x3.gif)
![[IM Output]](tile_2x3.gif)
![]() ![]() |
在 IM v6.1 之前,如果影像數量沒有使用該空間,montage 會自動截斷額外的空間。因此,像第一個 "9x1 " 影像這樣的設定會被截斷以產生一個 "7x1 " tile 影像。
因此,過去的 montage 使用者經常使用 " |
-tile
" 設定中刪除一行或一列來避免額外空間和多個影像的問題,尤其是在輸入影像數量未知的情況下。缺少的數字將被 montage 視為變數,montage 只會建立足夠的 tile 空間來容納所有輸入影像,只產生一個影像,絕不會產生多個影像。
magick montage font_[1-7].gif -tile x1 -geometry 16x16+1+1 tile_x1.gif magick montage font_[1-7].gif -tile x2 -geometry 16x16+1+1 tile_x2.gif magick montage font_[1-7].gif -tile x4 -geometry 16x16+1+1 tile_x4.gif magick montage font_[1-7].gif -tile 4x -geometry 16x16+1+1 tile_4x.gif magick montage font_[1-7].gif -tile 5x -geometry 16x16+1+1 tile_5x.gif magick montage font_[1-7].gif -tile 9x -geometry 16x16+1+1 tile_9x.gif |
![[IM Output]](tile_x1.gif)
![[IM Output]](tile_x2.gif)
![[IM Output]](tile_x4.gif)
![[IM Output]](tile_4x.gif)
![[IM Output]](tile_5x.gif)
![[IM Output]](tile_9x.gif)
-tile
" 設定的更典型用法,因為它可以確保 montage 的大小正確,同時仍然允許它在確定最終陣列大小方面有一些控制權。請注意上面的最後一個影像,我們在其中請求了 9 列影像。即使提供的影像少於 9 個,IM 仍然生成了請求的 9 列。另一方面,第一個影像(請求了一行)的長度正好可以容納所有影像。如果您擁有的輸入影像比 montage 可以使用 "-tile
" 設定提供的空間排列的影像多,則 montage 可以產生多個影像,方法是在檔名中新增影像序列號,或建立某種 GIF 動畫。如需詳細資訊,請參閱寫入多個影像。例如,在這裡,我要求 montage 透過為每個影像檔名提供一個「%d
」來表示每個框架/場景/頁面的編號,以便為每個產生的頁面儲存單獨的影像。
邊框裝飾
使用 montage 來排列影像的最大優點是,它提供了許多額外的控制項,可以在每個影像周圍新增額外的「裝飾」。例如,您可以透過在每個影像周圍新增一個 "-frame
" 來更好地定義正在顯示的影像。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -frame 5 -geometry +5+5 frame.jpg |
![[IM Output]](frame.jpg)
magick
」中的相同選項不同(請參閱添加 3D 框線範例)。蒙太奇框線選項會自動找出框線內部和外部斜角的預設值。因此,只需要一個參數數字。 邊緣裝飾
大約在 IM v6.1.0 版本,「-border
」成為蒙太奇的新裝飾選項。現在,它會在根據「-geometry
」設定調整大小後,在每個圖像周圍添加額外的「填充」。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -border 5 -geometry +5+5 border.jpg |
![[IM Output]](border.jpg)
![]() ![]() |
當同時應用框線裝飾時,「-border 」裝飾目前不起作用。 |
![]() ![]() |
在 IM v6.1.0 之前(大約)-border 會在「magick montage 」命令列中出現的位置應用於圖像,就像在「magick 」中一樣。也就是說,在圖像根據「 -geometry 」調整大小之前,就會將框線添加到圖像中,這會導致每個圖像周圍的框線寬度不同,具體取決於當時圖像的大小。為了消除這種不一致性,-border成為特殊的蒙太奇設定。 |
陰影裝飾
在框線中添加陰影也非常不錯。
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -frame 5 -shadow -geometry +5+5 frame_shadow.jpg |
![[IM Output]](frame_shadow.jpg)
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -shadow -geometry +5+5 -background lightblue \ shadow_noframe.jpg |
![[IM Output]](shadow_noframe.jpg)
|
![]() |
-geometry
」間距。因此,如果圖像靠得太近,則先前圖像的陰影可能會被後面的圖像遮擋。例如...
magick montage balloon.gif medical.gif present.gif shading.gif \ -tile x1 -shadow -geometry +1+1 -background none \ shadow_spacing.png |
![[IM Output]](shadow_spacing.png)
-geometry
」間距。為了避免過度「邊緣裁剪」陰影,「-shadow
」選項將在最終圖像的右邊緣和底邊緣添加 4 個額外的邊緣間距像素。這是在提供的正常「-geometry
」間距之上的。但是,如您在上面看到的,這個空間並不總是足夠的。蒙太奇目前也不提供對產生的陰影的偏移、顏色或「柔和度」的控制(至少目前還沒有),但是,您無法使用舊版蒙太奇提供的硬矩形陰影來進行此類控制。 標記蒙太奇圖像
您也可以指示蒙太奇使用其來源檔案名稱來標記圖像,儘管您可能需要調整圖像框的大小,否則標籤可能不適合,從而截斷文字標籤。在這種情況下,我們在幾何字串中添加了「60x60>
」,這會指示 IM 縮小較大的圖像以適應此空間,但如果圖像較小,則不放大圖像。這可能是蒙太奇最典型的用途。
magick montage -label '%f' balloon.gif medical.gif rose: present.gif shading.gif \ -tile x1 -frame 5 -geometry '60x60+4+4>' label_fname.jpg |
![[IM Output]](label_fname.jpg)
%f
」是一種特殊的格式字元,可以提取有關記憶體中圖像的各種細節。有關可以從圖像中提取的其他資訊的詳細資訊,請參閱圖像屬性轉義。您不必在標記縮略圖時使用「-frame
」。標籤沒有陰影,因此它們仍然清晰可讀。
montage -label '%f' balloon.gif medical.gif logo: present.gif shading.gif \ -tile x1 -shadow -geometry '60x60+2+2>' label_shadow.jpg |
![[IM Output]](label_shadow.jpg)
-set
」影像屬性運算子在讀取影像後重新標記它們。讓我們使用「-set
」運算子來新增更多關於影像的資訊。以及一些其他的蒙太奇設定...
magick montage balloon.gif medical.gif logo: present.gif shading.gif \ -tile x1 -geometry '90x32+2+2>' -pointsize 10 \ -set label '%f\n%wx%h' -background SkyBlue label_fname3.jpg |
![[IM Output]](label_fname3.jpg)
-label
」設定來定義影像在讀取時的預設標籤,或者您可以在之後使用「-set
」運算子重新標記影像。![]() ![]() |
請注意,'%wx%h ' 會提供影像在記憶體中的當前像素寬度和高度。如果影像大小經過修改,例如在輸入過程中,這可能與磁碟上(或建立時)的影像大小不同。如果您想要使用記憶體中的像素大小,請改用 '%[width]x%[height] '。 |
-set
」運算子將套用到哪些影像。例如,在這裡我們同時使用了兩種形式的標籤。但也讓我們為蒙太奇新增一個標題,因為我們可以這樣做...
magick montage -label Balloon balloon.gif \ -label Medical medical.gif \ \( present.gif -set label Present \) \ \( shading.gif -set label Shading \) \ -tile x1 -frame 5 -geometry '60x60+2+2>' \ -title 'My Images' titled.jpg |
![[IM Output]](titled.jpg)
-label ''
」或「+label
」來關閉下一個(些)影像的影像標籤。但是,您稍後會看到這兩種設定並不完全相同。這同樣適用於讀取後標籤「-set
」操作。
magick montage balloon.gif \ -label 'My Image' medical.gif \ +label present.gif \ -label ' ' shading.gif \ -tile x1 -frame 5 -geometry '60x60+2+2>' labeling.jpg |
![[IM Output]](labeling.jpg)
要嘛為所有影像加上標籤,要嘛就不要加!
您不必在蒙太奇操作期間為影像加上標籤。MIFF 和 PNG 格式都可以將標籤儲存為其影像格式的一部分。蒙太奇會自動標記任何讀取時已包含標籤的影像。這是自動執行的,不需要特別指定,我已經使用這種技術產生了一些非常複雜的影像蒙太奇。例如,標註角度範例 中的蒙太奇陣列就是使用這種技術建立的。如果您不想要這種自動標籤,則必須在讀取影像之前使用「-label ''
」明確告知蒙太奇將所有正在讀取或建立的標籤重設為空字串。或者,您也可以在讀取影像後使用「+set label
」刪除標籤中繼資料。這就是「+label
」與使用空標籤(「-label ''
」)的不同之處。前者會將預設行為重設回自動使用正在讀取的影像可能擁有的任何標籤中繼資料,而後者則會將標籤替換為空字串,有效地移除標籤。您也可以使用「-label '%l'
」保留影像的原始標籤,這在影像處理腳本中作為無操作標籤選項非常有用。請注意,「-set
」無法還原影像的原始標籤,一旦它被修改或移除,無論是使用「-label
」還是「-set
」
magick -label 'medical' medical.gif label_medical.png magick -label 'logo' logo: label_logo.png magick -label 'rose' rose: label_rose.png magick montage label_medical.png \ -label '' label_logo.png \ +label label_rose.png \ -tile x1 -frame 5 -geometry '60x60+2+2>' label_control.jpg |
![[IM Output]](label_control.jpg)
-label ''
」設定移除,而第三個影像也使用了影像標籤,因為我們使用「+label
」關閉了標籤設定。使用儲存的圖像元數據
當產生之後要讓 montage 使用的圖片時,重要的是要知道某個圖片檔案格式可以儲存何種圖片中繼資料。例如,只有 PNG 和 MIFF 圖片檔案格式可以在其儲存的圖片檔案格式中實際儲存「label
」中繼資料…
magick -label 'GIF' balloon.gif label.gif magick -label 'JPG' medical.gif label.jpg magick -label 'PNG' present.gif label.png magick -label 'MIFF' shading.gif label.miff montage label.gif label.jpg label.png label.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' label_files.jpg rm label.* |
![[IM Output]](label_files.jpg)
comment
」中繼資料,您可以透過在「-label
」中指定「%c
」參數來使用它。
magick -comment 'GIF' balloon.gif comment.gif magick -comment 'JPG' medical.gif comment.jpg magick -comment 'PNG' present.gif comment.png magick -comment 'MIFF' shading.gif comment.miff magick montage -label '%c' comment.gif comment.jpg comment.png comment.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' comment_files.jpg rm comment.* |
![[IM Output]](comment_files.jpg)
caption
」中繼資料。
magick balloon.gif -set caption 'GIF' caption.gif magick medical.gif -set caption 'JPG' caption.jpg magick present.gif -set caption 'PNG' caption.png magick shading.gif -set caption 'MIFF' caption.miff magick montage -label '%[caption]' caption.gif caption.jpg caption.png caption.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' caption_files.jpg rm caption.* |
![[IM Output]](caption_files.jpg)
magick balloon.gif -set my_data 'GIF' my_data.gif magick medical.gif -set my_data 'JPG' my_data.jpg magick present.gif -set my_data 'PNG' my_data.png magick shading.gif -set my_data 'MIFF' my_data.miff magick montage -label '%[my_data]' my_data.gif my_data.jpg my_data.png my_data.miff \ -tile x1 -frame 5 -geometry '60x60+2+2>' my_data_files.jpg rm my_data.* |
![[IM Output]](my_data_files.jpg)
在蒙太奇中保留間隙
雖然您可以透過明智地使用「-tile
」設定並控制給定的圖片數量在 montage 的底部留出額外空間,但在 montage 的中間留出空白區塊空間需要使用特殊的圖片。「null:
」生成的圖片專門為此目的而定義。它出現的位置不會收到任何標籤(即使已定義),也不會添加任何框架或陰影「絨毛」。除了 montage 繪圖畫布本身的背景顏色(或紋理)外,該區塊完全是空的。
magick montage -label 'Image' medical.gif null: present.gif \ -tile x1 -frame 5 -geometry +2+2 montage_null.jpg |
![[IM Output]](montage_null.jpg)
null:
」圖片表示單個像素的透明圖片。它也用作「錯誤圖片」,用於「-crop
」或「-trim
」等選項,這些選項可能會由於操作而產生「零」或空圖片。這個特殊的圖片不能儲存起來供以後使用以留下空白,目前它只在「magick montage
」的命令列中是「特殊的」。![]() ![]() |
目前,沒有一種方法允許蒙太奇圖片跨越多行或多列,就像在 HTML 表格中那樣。您也不能生成大小可變的行和列來最佳地適應正在生成的圖片陣列。 如果您真的需要這種功能,則需要開發自己的 montage 類型應用程式。如果您確實開發了某些東西,請貢獻出來,我們會考慮將其合併到現有的 montage 應用程式中。 一些解決方案包括自己標記和框選圖片縮略圖,然後使用附加圖片或使用更自由的圖層圖片技術。 |
更多蒙太奇設定
以上展示的「magick montage
」設定僅是蒙太奇的基本控制項。還有很多其他設定,您可以根據自己的需求考慮使用。 蒙太奇顏色設定
-background |
繪製框架外的顏色。通常將其設置為「none 」或「transparent 」,以便在網頁上使用。如果給定,則將改用 -texture 設定。 |
-bordercolor |
圖像框架內或任何邊框填充內的填充顏色。圖像中的任何透明區域都將變為此顏色,除非未添加此類裝飾。 |
-mattecolor |
用作框架顏色的顏色。請注意,顏色也會變亮和變暗,以賦予框架斜角 3D 外觀。所以這個設定實際上定義了 5 種顏色。(另請參閱圖像框架) |
-fill |
文字標籤和標題的填充顏色。 |
-stroke |
文字標籤和標題的筆畫顏色。 |
蒙太奇控制設定
除了上述內容之外,還包含了「
-tile {欄數}x{列數}
- 用於填充單個蒙太奇圖像的橫向和縱向圖像數量。如果讀取或創建的圖像數量超過單個蒙太奇圖像的容量,則會創建多個圖像。(請參閱上面的平鋪控制項)
-title {字串}
- 使用與標記個別圖像相同的字體(但更大)在整個蒙太奇上設置標題。
-frame {寬度}
- 使用提供的寬度在包含圖像的方框周圍創建一個框架(必須至少為 2,但 5 或 6 是比較好的值)。如果使用圖像中的任何透明度,也會變成邊框顏色。
-border {寬度}
- 使用提供的寬度在圖像周圍創建邊框。如果使用圖像中的任何透明度,也會變成邊框顏色。
-shadow
- 生成框架的陰影。請注意,不需要也不應提供參數。
-texture {檔案名稱}
- 使用給定的紋理(平鋪圖像)作為背景,而不是特定的顏色。有關更多信息,請參閱下面的背景和透明度部分。
-geometry {寬}x{高}+{X}+{Y}
- 在蒙太奇將所有圖像讀取並覆蓋到其畫布上之前調整圖像大小。它還定義了繪製圖像的圖塊的大小和間距。如果未指定大小,則不會調整圖像大小。
-gravity {方向}
- 如果圖像小於框架,則圖像在框架中的放置位置。默認情況下,它位於中央。
label:
」圖像建立運算子能夠理解的所有字體設定(請參閱標籤圖像產生器)。這些設定用於建立顯示在圖像下方的標籤。其中包括「-font
」、「-pointsize
」(對於「-title
」無效)、「-density
」、「-fill
」、「-stroke
」和「-strokewidth
」等設定。只要在最後的「輸出檔名」參數之前定義或重設任何或所有上述設定,montage 就會按照您的要求使用它們。 重複使用圖像讀取/建立設定
但請注意,其中許多選項也用於其他目的,無論是在圖像產生或圖像處理過程中。但由於 IM v6 中「依序處理」的命令列處理方式,這對「magick montage
」命令來說不成問題。這表示您可以自由使用任何這些選項設定來讀取、建立或修改正在讀取的圖像,然後在讀取或建立所有圖像後重設這些設定。最終的設定值將是 montage 用於最終處理的值。這與版本 6 之前的 IM 版本不同,在那些版本中,通常無法在不產生中間圖像的情況下將圖像建立設定與 montage 設定分開(例如上述圖像標籤範例)。以下是一個設定重複使用的實際範例。我想建立一個表格,列出我在這些範例頁面中使用的一些字體,然後將設定重設為其他值,以便 montage 對圖像進行最終處理。 magick montage -pointsize 24 -background Lavender \ -font Candice -label Candice label:Abc-123 \ -font Corsiva -label Corsiva label:Abc-123 \ -font SheerBeauty -label SheerBeauty label:Abc-123 \ -font Ravie -label Ravie label:Abc-123 \ -font Arial -label Arial label:Abc-123 \ -font ArialI -label ArialI label:Abc-123 \ -font ArialB -label ArialB label:Abc-123 \ -font ArialBk -label ArialBk label:Abc-123 \ -font CourierNew -label CourierNew label:Abc-123 \ -font LokiCola -label LokiCola label:Abc-123 \ -font Gecko -label Gecko label:Abc-123 \ -font Wedgie -label Wedgie label:Abc-123 \ -font WebDings -label WebDings label:Abc-123 \ -font WingDings -label WingDings label:Abc-123 \ -font WingDings2 -label WingDings2 label:Abc-123 \ -font Zymbols -label Zymbols label:Abc-123 \ \ -frame 5 -geometry +2+2 -font Arial -pointsize 12 \ -background none -bordercolor SkyBlue -mattecolor DodgerBlue \ montage_fonts.gif |
![[IM 輸出]](montage_fonts.gif)
magick montage
」指令分為兩個階段。我使用一個幾乎為空的額外行清楚地標記出來。第一部分基本上與您使用一般的 IM「magick
」指令定義多個圖像完全相同,並且以相同的「所見即所得」順序處理。第二部分定義了我希望「magick montage
」指令本身使用的「所有」設定。也就是說,我想要在最終蒙太奇圖像中使用的框架、圖像大小調整、字體和顏色。我特別注意要為蒙太奇圖像下方的標籤重設「-font
」和「-pointsize
」設定。雖然您可以像這樣分隔「magick montage
」的選項,但您實際上可以在命令列上的任何時間定義蒙太奇設定。只要這些設定不會干擾您的圖像建立和處理選項,並且在到達命令列末尾時仍然正確定義,「magick montage
」就會使用它們。旁白:您可能想看看我編寫的 shell 腳本來執行與上述類似的操作(並且適用於早期版本的 montage)以顯示一個名為「show_fonts
」的 TrueType (.ttf) 字體目錄。另一個 shell 腳本範例是「show_colors
」。蒙太奇與 Magick 選項差異
現在,雖然「magick montage
」通常允許您在讀取和處理其輸入圖像時使用任何「magick
」設定和運算符,但有一些差異需要強調。這些「magick
」運算符和設定在「magick montage
」中使用時有所不同。如果真的需要使用 "
-tile
- 在「
magick
」中,「-tile
」設定定義要用作紋理的圖像,而不是使用「-fill
」顏色。在「magick montage
」中,它定義了如何佈局單個圖像單元格的「圖塊」。有關更多詳細資訊,請參閱上面的圖塊佈局控制。-frame
- 在「
magick
」中,這是一個用於在圖像周圍添加 3D 框架邊框的運算符,並且需要 4 個參數才能正常工作(請參閱轉換框架範例)。有關更多詳細資訊,請參閱框架裝飾。-border
- 大約在 IM v6.1.0 版本中,此運算符成為一個特殊的蒙太奇選項。因此,就像之前的 frame 選項一樣,它只接受一個數字作為參數,而不是像轉換邊框那樣接受兩個參數。有關更多詳細資訊,請參閱邊框裝飾。
-shadow
- 「
magick
」中的「-shadow
」選項採用一個參數,該參數用於建立柔和的模糊陰影,可以放置在原始圖像的第二個副本下方。但是,在「magick montage
」中,這只是一個布林值設定,用於開啟和關閉矩形陰影功能。有關更多詳細資訊,請參閱陰影裝飾。-geometry
- 「
magick montage
」中的「-geometry
」選項僅用於提供最終蒙太奇中每個單元格內的圖像大小,以及單元格之間的間距。在「magick
」中,它只調整最後一個圖像的大小,並設定圖像合成的偏移量。
magick
" 格式的選項,則需要先使用 "magick
" 預處理影像,再將其傳遞給 "magick montage
"。一種使用中繼檔案的方法已在上面的 影像標籤 範例中示範過。另一種方法是直接在 "magick
" 中進行處理,然後將產生的多個影像通過管道傳輸到 "magick montage
"。如果始終先進行影像輸入處理,然後再設定 "magick montage
" 特定的設定(就像我在所有這些範例中所做的那樣),這種分離很容易做到。這在上面的最後一個字型範例中特別明顯。例如,讓我們使用 "magick
" 框住影像,然後使用 "magick montage
" 標籤框再次框住它們。
magick -label %f balloon.gif medical.gif present.gif shading.gif \ -mattecolor peru -frame 10x5+3+0 miff:- |\ magick montage - -tile x1 -frame 5 -geometry '64x56+5+5>' double_frame.jpg |
![[IM Output]](double_frame.jpg)
magick
" 格式的 "-frame
" 運算子所需的額外參數。影像目錄索引
HTML 縮圖影像地圖
Montage 特別適合用於產生影像的縮圖地圖。例如,我在這裡建立了 照片影像 來源目錄的索引,其中包含 IM 範例中使用的數位照片範例。點擊下面的「藝術」影像以查看結果。
|
![]() IM 範例 照片庫 |
![]() ![]() |
請注意使用 '%[width]x%[height] ' 而不是僅僅使用 '%wx%h '。這一點很重要,因為影像在讀取時會被調整大小。前者會使用影像在磁碟上的原始像素大小來標記影像,而後者則會使用影像當前的調整後大小。這一點很容易被使用者忽略。 |
當然,如果您只需要一個索引圖像,則不必生成 HTML 索引文件。在這種情況下,只需將上述命令中的“
photo_index.png
所有影像縮圖的蒙太奇 photo_index_map.shtml
縮圖影像的 HTML「影像地圖」 photo_index.html
全球資訊網的 HTML 縮圖索引頁面。
這也包含先前影像地圖的副本。
INDEX.html
”替換為您要生成的圖像。請注意,圖像“-label
”使用了圖像屬性轉義“%t
”。這是沒有任何“路徑”組件的圖像文件名。儘管 HTML 鏈接仍將包含適當的“路徑”組件,允許您在與圖像本身不同的目錄中構建索引圖像。上述示例中的源圖像“'*_orig.*'
”被引用,因此“magick montage
”命令會自行擴展“*”,而不是由命令行 shell 擴展。這避免了您可能遇到的任何命令行長度限制問題。此外,我還會在讀取圖像時對其進行一些初始調整大小“[120x190]
”(請參閱讀取圖像修改器)。對於 JPEG 圖像,我還指定了一個較小的“-size
”設置,以便 JPEG 庫可以進行一些非常粗略的初始縮放,而不會將整個圖像讀入內存。如果沒有這樣做,那麼非常大的 JPEG 圖像可能會在沒有真正需要的情況下耗盡大量的內存和 CPU 週期。我還“-strip
”刪除圖像可能具有的任何配置文件。有關更多信息,請參閱配置文件、剝離和 JPEG 處理和讀取 JPEG 圖像。請記住,montage“-geometry
”選項也可以指定最終的調整大小設置,但在這種情況下不需要它,因為我在讀取過程中完成了它,因此我沒有在該設置中設置任何“大小”。最後,使用“-tile
”選項“5x
”來確保所有圖像都出現在單個圖像中,否則“magick montage
”可能會生成多頁 HTML 文件,這些文件沒有正確鏈接在一起。這有望會改變,儘管 HTML 生成不是 ImageMagick 的主要目標。有關生成縮略圖和 HTML 索引頁面的其他方法,請閱讀縮略圖示例頁面。使用 JPEG 圖像的較小 HTML 索引映射
上面的索引圖像生成了 PNG 格式的索引圖像。之所以使用這種格式,是因為它是一種無損格式,當被索引的圖像顏色差異很大時,這一點非常重要。如果背景顏色設置為“transparent
”或“none
”,它還可以使用 montage 的新“軟陰影”功能。非常非常舊的 IM 會為上述內容生成 GIF 圖像。但是,由於格式限制,這會對結果進行嚴重的色彩還原。它也不允許像 PNG 那樣使用半透明的“軟陰影”。JPEG 也不允許半透明,但如果您沒有為圖像使用透明背景,則這不是問題。但是,它比 PNG 小得多,這提供了一種方法來大幅減小索引圖像的大小,尤其是對於網絡使用,並且仍然可以處理大範圍的顏色。但是,上面的 HTML 輸出只生成 PNG 格式的圖像,因此您不僅需要將 PNG 轉換為 JPEG,還需要進行一些額外的處理來修復 HTML 文件。
|
![]() IM 範例 照片庫 |
- 首先,我像之前一樣生成一個 montage 縮略圖 HTML 索引。這會生成以下文件:“
photo_jpeg.html
”和“photo_jpeg.png
” - 然後,我將 PNG 圖像轉換為更小的有損 JPEG 圖像。
- 然後,我使用一個小的“
perl
”單行腳本將 HTML 文件更改為使用 JPEG 圖像而不是 PNG。 - 最後,我刪除了 PNG 圖像以及我不需要的 SHTML 貼圖文件。
-quality
」設定,使 JPEG 圖像更小,儘管預設設定產生的結果已經相當合理。其他可能的選項包括使用「-sampling-factor 2x1
」使其更小。 視覺索引圖像(非蒙太奇解決方案)
除了使用蒙太奇之外,另一種方法是使用特殊的「視覺索引」輸入格式...
|
![]() 視覺索引 照片庫 |
|
![]() 視覺 HTML 照片庫 |
VID:
」在內部使用蒙太奇來產生索引陣列。但是,您無法像直接使用蒙太奇那樣進行相同的控制。請注意,VID HTML 索引會建立 PNG 格式的縮略圖圖像。 拍立得照片的蒙太奇
隨著 複雜拍立得轉換 的出現,現在可以產生風格迥異的蒙太奇和蒙太奇索引。
|
![]() 拍立得 蒙太奇 |
+polaroid
」來框住和標記圖像,因此我需要自己調整圖像大小(使用「-thumbnail
」),並確保在實際建立「magick montage
」索引陣列之前,已重置「-background
」和圖像「-label
」。然而,拍立得轉換 在將「捲曲」效果添加到縮略圖圖像的過程中,往往會使文字變得模糊。但是,您可以通過以較大的尺寸生成拍立得圖像,然後將結果縮小 50% 來改善整體效果。唯一的缺點是「陰影」效果會減弱。
|
![]() 更清晰 拍立得 蒙太奇 |
photo_store
」目錄中生成蒙太奇縮略圖索引。有關此腳本的結果,請參閱照片庫索引。使用蒙太奇的特殊技巧
蒙太奇成列
默認情況下,「magick montage
」只能按給定順序(通常是排序順序)逐行放置圖像。但是,有時您希望它們以列順序顯示。這無法通過單個命令完成,而需要至少兩個命令的管道。例如,在這裡,我使用兩個蒙太奇生成了一個 5x3 磁貼的頁面。
|
![]() |
magick montage
」建立磁貼並執行任何所需的幾何形狀磁貼大小調整、框住、標記和間距。然後,它將為每一列磁貼輸出一個圖像。第二個「magick montage
」然後簡單地將各列合併成「頁面」圖像,而不在列之間添加任何額外的空間。如果您只需要一個包含可變列數的單個圖像,則可以用「magick
」替換第二個「magick montage
」,以便在不添加額外「頁面」空間的情況下進行合併。例如...
|
![]() |
重疊的蒙太奇圖塊
在 IM 使用者論壇 中,Fred Weinhaus(又名 fmw42)與另一位使用者 pooco 在討論時發現,如果將圖塊間距(在 "-geometry
" 設定中設定)設定為負數,則實際上可以重疊繪製圖像的圖塊區域。例如,我們在此使用負的水平圖塊間距來排列單行圖像。旋轉圖像將使重疊的系列更加有趣...
magick montage null: font_*.gif null: -background none -rotate 30 \ -background white -tile x1 -geometry -8+2 montage_rot_overlap.jpg |
![[IM Output]](montage_rot_overlap.jpg)
null:
" 間距圖像,這樣圖像就不會溢出 "magick montage
" 計算並生成的畫布。這為我們提供了一些有趣的可能性。例如,您可以通過使用隨機旋轉的 拍立得變換 來生成一行非常有趣的重疊縮略圖。
|
![[IM Output]](polaroid_overlap.jpg)
+polaroid
" 在不同「運行」時可能產生的圖像大小的隨機性,從而更好地控制圖像之間的最終間距和重疊。這是一個非常有趣的結果,儘管它實際上應該被歸類為錯誤,因為這不是 "magick montage
" 的預期用途。我也不希望任何 HTML 圖像映射都能正常工作,除非使用者進行一些修復。但是,使用腳本形式的 圖層合併 演示了一個更複雜且使用者可控的重疊圖像解決方案,這是推薦且更合乎邏輯的解決方案。請參閱 圖層圖像的程序化定位 中的示例。 蒙太奇串聯模式
如您所見,蒙太奇具有一种特殊的串聯模式,可以用於將圖像連接在一起,而無需任何額外的空間,就像 "-append
" 選項一樣。但是,我建議您適當設定 "-tile
" 選項,以便將附加方向設定為水平、垂直或陣列。例如,我們在此使用 "-tile x1
" 水平附加圖像。
magick montage balloon.gif medical.gif present.gif shading.gif \ -mode Concatenate -tile x1 montage_cat.jpg |
![[IM Output]](montage_cat.jpg)
magick montage balloon.gif medical.gif present.gif shading.gif \ -mode Concatenate -tile 2x2 montage_array.jpg |
![[IM Output]](montage_array.jpg)
magick montage medical.gif rose: present.gif shading.gif \ granite: balloon.gif netscape: recycle.gif \ -mode Concatenate -tile 4x montage_cat2.jpg |
![[IM Output]](montage_cat2.jpg)
magick montage medical.gif rose: present.gif shading.gif \ granite: balloon.gif netscape: recycle.gif \ -mode Concatenate -tile 4x -frame 5 montage_cat3.jpg |
![[IM Output]](montage_cat3.jpg)
-mode
" 設定之前設定了 "-frame
",它將被關閉。因此,除了在不小心使用「零幾何」(見下文)時,否則不太可能看到這種怪癖。![]() ![]() |
蒙太奇串聯到「HTML」圖像索引格式會產生不正確的圖像映射。基本上,生成的圖像映射就像生成的蒙太奇是真正均勻劃分的圖像「陣列」一樣,而不是圖像的串聯。換句話說,對於「短」圖像行來說,這是錯誤的。 |
零幾何,需要小心
如果只有 "-geometry
" 間距值(未指定圖像大小調整),則所有蒙太奇圖像框架都將設定為相同大小,以便最寬和最高的圖像都能容納,而無需調整大小。這本身就是一種有用的行為...但是,在圖像框架周圍和之間留下了 1 個像素的間隙。但是,如果您嘗試使用 "+0+0
" 的位置刪除這些間隙,則會遇到一個非常不尋常的問題...您指定的「零幾何」 (亦即「-geometry 0x0+0+0
」),會產生將 montage 置於「連接」模式的額外效果 (見上文),這並*不是*我們在上述範例中想要的。對於單一影像,我們是否使用零「-append
」(以及連接模式) 也沒有關係。預期的結果就是我們想要的,沒有額外的邊框。因此,如果您僅使用「magick montage
」來為影像新增標籤,「-geometry +0+0
」就可以了。但是,如果您為影像指定了非零的幾何「大小」,即使您使用了零偏移,也不會叫用連接模式。這反過來為我們最初的問題提供了一個巧妙的解決方案。我們要做的是設定一個「1x1
」的幾何影像大小,但也告訴 IM 不要將影像縮小到這個大小 (使用「<
」字元)!換句話說,永遠不要調整影像大小,只需在非零的幾何參數中使用零偏移。這帶出了另一個好的經驗法則...
使用 montage 時,請務必設定非零的幾何。
即使它只是像我上面使用的「假」幾何。背景和透明度處理
預設情況下,影像是疊加在 montage 畫布上的,畫布是使用「-background
」顏色設定建立的,如下所示。
|
![]() |
-texture
」來定義一個拼貼影像來代替「-background
」顏色,而不是純色。
|
![]() |
|
![]() |
-bordercolor
」設定將用於填充邊框內部,實際上成為影像的背景顏色。另請注意,影像的任何透明區域也會設定為此顏色。![]() ![]() |
在 IM 6.1.4 版之前,在影像的透明區域中看到的內容是未定義的。在某些版本中,您會看到穿過有邊框的影像到背景顏色或紋理。在其他版本中,您可能會看到黑色或白色。在其他版本中,您將能夠看到所有圖層,並且最終影像在原始影像透明的地方將是透明的。如果這對您來說是個問題,請*立即*升級。 |
-bordercolor
」填充。例如,比較「1
」的邊框和最小邊框寬度「2
」。None
」或「Transparent
」的「-background
」顏色,而不要使用任何「-texture
」影像來覆蓋該設定。例如,在這裡我們產生了一個透明的 montage。請注意,「-geometry
」仍用於在影像周圍和之間新增空間。
|
![]() |
-frame
」,您也需要將「-bordercolor
」設為透明。
|
![]() |
-shadow
」選項完全不受上述所有因素的影響。它是在將其疊加到背景顏色或紋理之前,根據儲存格的最終透明形狀來套用的。
|
![]() |
|
![]() |
歡迎提供任何關於使用「
magick montage
」的建議、想法或其他範例。這些範例頁面中的任何內容也同樣歡迎指教。Montage Image Output Size The mathematics of montage is straight forward... Basically the montage width should be.... (geometry_size + 2*frame_size + 2*geometry_offset) * images_per_column That is, each 'cell' of montage has a fixed sized frame and spacing (border) added around it before the cells are appended together. In essence the size of montage is also a multiple of the tile size, which can make it easy to break up montage, or re-arrange the 'cells', if so desired, as they are simple fixed sized tiles in a rectangular array. The height is similar but with tha additional spacing needed for labels and the optional montage title, both of which are much more difficult to calculate, as they depend heavilly on text, font, pointsize, and density settings. There is also an effect of adding a shadow to the montage in this calculation, but that appears to be a simple small fixed addition to the bototm and right edges. It does not appear to effect the tile size used.