ImageMagick 範例 --
建立縮圖和相框
![]() |
||
縮圖儲存
我想先從一個非常重要的觀點開始。來自攝影機和照片掃描的原始圖片應以原始格式保存在安全的地方,最好是非失真格式(不是 JPEG 圖片格式),不做任何修改大小調整或其他更改,可能只是更改檔案名稱。當然,掃描的圖片可以重新掃描,但最好重複使用原始來源,而不是稍後從已經降級的副本重新製作。這一點非常重要,因為任何形式的修改都意味著圖片中的一些資訊會遺失,並且提供了一個來源,您可以從中重新處理您的圖片以用於其他用途。原始圖片不必是您的工作圖片,工作圖片可能會調整大小或調整顏色以供顯示,只需確保將您的圖片儲存在安全的地方以備將來使用。接下來要做的是,甚至在建立任何縮圖之前,就要決定如何儲存相對於正常大小圖片格式的縮圖,然後堅持使用該方案。這對於網頁來說尤其重要。方案包括...- 以您想要或需要的尺寸將主要照片圖片儲存為失真 JPEG 格式,然後對產生的縮圖使用相同的名稱,但使用 GIF 圖片格式。例如,相同檔名但不同的格式和副檔名。主圖片:
photo_name.jpg
縮圖:
photo_name.gif
- 將縮圖以相同的名稱儲存在一個子目錄中,例如「
thumbs
」或任何你方便的名稱。主圖像:photo_name.jpg
縮圖:
thumbs/photo_name.jpg
- 使用與原始圖像相同的格式,但在文件名中添加一個額外的字符串。典型的字符串添加包括「
_tn
」、「_small
」、「_thumb
」等...。主圖像:photo_name.jpg
縮圖:
photo_name_tn.jpg
- 以上方法的組合。沒有理由不能以不同的圖像格式保存縮圖,並在文件名中附加一個額外的圖像後綴,並保存在一個子目錄中!主圖像:
images/photo_name.jpg
縮圖:
thumbs/photo_name.jpg.gif
這在 WWW 上實際上相當常見,我甚至見過將兩個目錄存儲在完全不同的機器上!
magick mogrify
」生成所有縮圖,而不會破壞原始圖像,方法是使用「-format
」設置來指定輸出圖像格式。從 IM v3.2.0 開始,第二種方案現在也可以使用「magick mogrify
」來完成,這要歸功於添加了一個特殊的「-path
」設置,該設置指定了用於保存修改後圖像的不同目錄。例如,這會將 JPG 圖像轉換為剛剛創建的「thumbs
」子目錄中的 GIF 縮圖。
mkdir thumbs magick mogrify -format gif -path thumbs -thumbnail 100x100 *.jpg |
magick mogrify
」之前先複製原始圖像,創建一個特殊的腳本來處理圖像,或者使用其他一些 DIY 方法。一些更簡單的非 IM 技術在批次處理 - 不使用「magick mogrify
」的示例部分的末尾有詳細說明。無論您選擇哪種方法,重要的是選擇一種縮圖存儲方案,然後堅持下去。通過對所有縮圖使用相同的方案,您可以編寫 shell 或 Perl 腳本來輕鬆生成縮圖,甚至生成 HTML 連結。稍後將詳細介紹。 縮圖格式的選擇
保存縮圖的格式會對其在磁盤上的最終大小和網頁的下載速度產生很大的影響。在這方面,我建議您研究各種常見文件格式的摘要。特別是您應該注意...- JPEG 壓縮率高且是有損的,但它是為大型真實世界圖像設計的,而不是為小型縮圖設計的。它也不允許任何形式的透明度。總之,這種格式適合於大型圖像,不適合於縮圖。請注意配置文件(請參閱下一節)。雖然不建議將 JPG 用於縮圖,但在 WWW 上查看圖像時,建議您使用較小的 800x600 像素圖像,並使用低得多的「
-quality
」百分比(例如 50 甚至 30%),儘管它看起來不會很好。還有人建議使用「-sampling-factor 2x1
」也會產生較小的 JPEG 圖像大小。我不建議將完整的原始圖像直接放在網路上,除非是暫時地(在一個引用的位置)讓朋友下載。請記住不要鏈接到它(即使是通過目錄索引),而且不要超過一天,否則它可能會被 Google 搜索到。 - GIF 適用於簡單的小圖像,並且壓縮效果不錯。它的顏色限制為 256 色,但對於小圖像來說,這幾乎不明顯。它也可以製作圖像的卡通動畫,除非您真的想要花俏,否則縮圖並不需要。問題是該格式只有布林值(開啟/關閉)透明度,這使得形狀圖像的邊緣看起來很糟糕。解決方案是將縮圖設計為僅使用布林值透明度,或將其排列為只能在特定背景顏色上使用。有關詳細信息,請參閱 背景顏色或圖案上的 GIF 上的範例。
-
PNG 是現代理想的縮圖格式。它具有良好的壓縮率和內部格式樣式。它不會造成損失,可以顯示所有顏色,而且現在幾乎所有瀏覽器都支援這種格式(不過對於 Microsoft Internet Explorer v7 之前的版本,需要在網頁中添加一些 Java 腳本)。更重要的是,這種格式支援半透明顏色,可以使陰影和邊緣清晰銳利,或者根據您的需要變得模糊。但是,此格式不支援動畫,不過相關的 MNG 格式可以。然而,似乎很少有瀏覽器支援該格式。對於縮圖,您可以通過減少深度和顏色數量以及為最終縮圖圖像設置更高的「
bzip
」壓縮品質(「-quality
」中的第一個數字)來減小最終圖像的大小。例如,建議對不涉及透明度的小型 PNG 縮圖使用以下內容。-strip -quality 95 PNG8:thumbnail.png
不要將 JPEG、PNG8 或 GIF 用於中間工作圖像!
最好使用 PNG 或 MIFF。
最好使用 PNG 或 MIFF。
配置文件、清除和 JPEG 處理
許多來自數碼相機、掃描軟件和一些繪圖程序(Photoshop 尤其如此)的圖像會以配置文件的形式保存有關圖像的額外信息。這包括 JPEG、PNG、TIFF 等圖像格式,以及從 IM v6.2.4-1 開始的 GIF 格式。當然,IM 特定的格式 MIFF 也可以做到這一點。(有關更多詳細信息,請參閱 圖像配置文件)。這些配置文件的大小可能高達 60 Kb,因此會對文件大小產生很大影響,默認情況下,IM 會保留這些配置文件信息。縮圖不需要這些數據,甚至主圖像通常也不需要。您也可以使用 IM 命令從圖像中刪除配置文件...
magick input.jpg -strip output.jpg magick mogrify -strip *.jpg |
-profile '*'
" 選項來移除描述檔。然而,建議您僅在修改影像時才移除描述檔,特別是在縮小影像尺寸以供網頁顯示或縮圖時。在調整大小時移除描述檔,特別是在產生較小的縮圖時非常常見,因此 "-resize
" 和 "-strip
" 已合併成一個新的操作,專門用於此目的。當然,這個調整大小的操作稱為 "-thumbnail
"。例如...
magick -define jpeg:size=240x180 image.jpg -thumbnail 120x90 thumbs/image.gif magick mogrify -path thumbs -format gif -define jpeg:size=240x180 -thumbnail 120x90 '*.jpg' |
![]() ![]() |
在 IM v6.5.4-7 之前,"-thumbnail " 會移除影像中的所有描述檔,包括 ICC 色彩描述檔。從此版本開始,將保留色彩描述檔。如果不需要色彩描述檔,請使用 "-strip " 移除所有描述檔。 |
magick mogrify
" 當然可以為整個目錄的 JPEG 影像產生縮圖,但請注意不要覆蓋您要保留的任何縮圖。有關使用其他非 IM 方法循環處理大量影像的資訊,請參閱 批次處理 - 不使用 Mogrify 的範例章節。對於非常大的影像,"-thumbnail
" 調整大小運算子會先將影像縮小至最終縮圖大小的 5 倍,然後再執行實際的調整大小操作。這進一步加快了縮圖的產生速度。然而,對於 JPEG 影像的縮圖,可以使用一種更好的方法來限制初始影像大小,即一開始就不要將整個影像讀入記憶體。"-define jpeg:size=
" 設定(如上例所示)是 JPEG 影像庫的一個特殊提示,用於減少從非常大的 JPEG 影像中讀取的資料量。請參閱 讀取 JPEG 檔案。![]() ![]() |
在 IM v6.5.6-0 之前,此編碼器設定是從 "-size " 設定中提取的。這會導致使用者在使用 "-size " 建立影像時出現問題,但隨後 JPEG 讀取會產生意外結果。因此,已將其更改為特殊的編碼器設定。在舊版的 IM 中,由於這種「雙重」角色,您可能需要在讀取 JPEG 影像之前使用 " +size " 重設設定。 |
-define jpeg:size=
" 設定。因此,調整任何輸入影像格式大小的建議方法現在是...
magick -define jpeg:size=240x180 input.img'[120x90]' \ -strip output_thumbnail.gif |
一般縮圖建立
產生一般縮圖(特定高度)
讓我們將一張 大型範例 JPEG 影像 轉換為高度 90 像素的 GIF 縮圖,並自動調整寬度(在 250 像素的寬度限制內)以保持影像的長寬比。
|
![]() |
-thumbnail
」選項。這不僅可以調整影像大小,還會去除原始 JPEG 影像中可能存在的任何設定檔和註釋資訊。此外,由於它在最初縮小影像時使用了「-sample
」調整大小運算子,因此速度更快,同時為小型縮圖產生合理的結果。我還為讀取的影像設定了最小「-define jpeg:size=
」。這會傳遞給 JPEG 程式庫,該程式庫會傳回介於此大小和此大小兩倍之間的影像(如果可能),而不是整個非常大的原始影像。基本上,在不需要的情況下,不要使用巨大的影像佔用電腦記憶體。我使用的 JPEG 大小提示至少是最終縮圖的兩倍,這樣調整大小仍然會產生合理的結果。「-auto-orient
」運算子可確保影像(如果來自數位相機)根據相機的方向正確旋轉。我正在使用的「桌面」影像不需要這樣做,但我將其包含在上面供數位相機使用者使用。但是請注意,方向仍然可能會出錯,尤其是在直接向下或向上拍攝照片時,例如在拍攝文件照片時。結果是一個特定高度但可變寬度的縮圖。我在我自己的網頁上使用這個縮圖,這樣一排影像的高度就會一致,形成整齊的外觀。上面 250 像素的寬度限制很重要。如果未設定(例如:使用「-thumbnail x90
」),則 IM 在產生非常長且細的影像的縮圖時可能會出現問題,例如網頁線條影像中顯示的影像。在這種情況下,結果將是影像的非常非常長的「放大」,而不是一個小的縮圖。有些人(包括我自己)發現,雖然 IM 的調整大小是最好的實現之一(請參閱IM 調整大小與其他程式),但結果仍然有點模糊。因此,您可以通過在「-thumbnail
」調整大小操作後稍微銳化影像(使用「-unsharp
」)來改善上述結果。如需更多資訊,請參閱銳化調整大小後的影像 -- Photoshop 調整大小技術,但實際上這完全取決於個人喜好。「
magick mogrify
」版本與「magick
」命令相同(沒有初始輸入影像),但會自動為當前目錄中的「每個」JPEG 影像產生縮圖。影像參數用引號括起來,以便 IM 本身會掃描目錄,而不是命令列 shell。這可以防止在包含大量影像的目錄上出現「行限制溢位錯誤」。
magick mogrify -format gif -define jpeg:size=500x180 -auto-orient \ -thumbnail 250x90 -unsharp 0x.5 '*.jpg' |
![]() ![]() |
請注意,「magick mogrify 」會盲目地建立縮圖,替換任何同名的現有影像。在這種情況下為 GIF 影像。使用此命令時,請務必格外小心。建議在進行任何處理之前始終備份。 |
![]() ![]() |
您可以使用「-path 」設定來定義單獨的縮圖目錄,而不是指定不同的格式(使用「-format 」)以防止「magick mogrify 」覆寫原始來源影像。您可以同時使用這兩種輸出選項。 |
magick mogrify
」可以用不同的後綴(「-format
」)或目錄(「-path
」)輸出新圖像,但這些是您使用此命令的唯一選項。如果您還想更改圖像的名稱,例如添加「_tn
」或「_sm
」來表示圖像的縮略圖或小版本,那麼我建議您創建一個 shell 腳本來為您完成這項工作,使用「magick
」一次處理一個。 我寫了這樣一個腳本來做到這一點,同時也生成了 HTML 索引。調整縮圖大小以適應
另一種自動生成縮略圖的形式是將圖像縮小以適應固定大小的框,比如說「100x100
」,但保持圖像的縱橫比。這也是調整大小幾何設置的默認含義。但是,我不想放大已經適合這樣一個盒子的圖像。為此,您需要在幾何字符串中添加一個「> 」。
|
![]() |
填充縮略圖
下一個最常見的要求是生成縮略圖,用特定顏色的邊框填充圖像(通常是「黑色
」或「透明
」,但在這些示例中,我將使用「天藍色
」),以便縮略圖的大小正好是您想要的。例如:一張 400x300 像素的圖像縮小以適應 100x100 像素的盒子,通常(使用上面的方法)將具有 100x75 像素的大小。我們想在圖像的頂部和底部(以及側面以確保)添加一些填充邊框,以使最終的縮略圖圖像始終為 100x100 像素大小。有很多方法可以做到這一點,從 IM v6.3.2 開始,最好的方法是使用Extent 運算符。
|
![]() |
從 IM 版本 6.2.5 開始,您還可以使用視口裁剪,並將結果展平到背景顏色上。
|
![]() |
使用Extent和視口裁剪之間的關鍵區別在於您是要一個最小的虛擬畫布還是要將整個區域「填充」。另一種填充圖像的方法是將縮略圖覆蓋到具有正確大小的背景圖像(實際圖像、純色或平鋪畫布)上,在本例中為 128x128 的「granite: 」內置圖像。
|
![]() |
-composite
」操作需要由單獨的「composite
」命令來完成,而不是上面的單一命令方法。但是,從圖像處理的角度來看,以上所有方法實際上都在做同樣的事情。裁剪縮圖以適應
另一種方法是,不是填充圖像以適應我們想要的特定縮略圖大小,而是切掉不適合最終大小的圖像部分。當然,這意味著您實際上會丟失原始圖像的某些部分,尤其是圖像的邊緣,但結果是圖像中心部分的放大縮略圖。這通常(但並非總是)是圖像的主要主題,因此這是一種實用的縮略圖創建方法。從 IM v6.3.8-3 開始,添加了特殊的調整大小選項標誌「^
」以使這更容易。我們只需使用此標誌調整大小,然後切掉溢出所需大小的圖像部分。
|
![]() |
![]() ![]() |
在 IM v6.3.8-3 加入這個特殊旗標之前,您需要一些非常複雜的技巧才能達成相同的結果。詳情請參閱調整大小以填滿指定空間。 |
區域適應縮圖大小
最後兩種方法通常會使圖像非常小,並帶有很多額外的填充,或者會裁切掉圖像的大部分,以便完全填滿空間。但是,通過使用不同的調整大小旗標,可以獲得介於這兩種極端之間的縮略圖。例如,一個 100x100 像素的縮略圖有 10,000 個像素。現在,如果我們要求 resize 將圖像調整到接近該像素大小(使用調整大小 '@
' 旗標),您將獲得一張需要一點填充和一點裁剪的圖像。這最大限度地提高了生成的縮略圖的大小,同時又不會裁剪掉太多內容。例如...
|
![]() |
適應給定空間摘要
總之,以下是三種將圖像縮略圖化為特定大小區域的方法的結果。所有三種方法都使用完全相同的代碼,只是使用的調整大小參數/旗標略有不同。
![]() 填充擬合 調整大小,無旗標 |
![]() 區域擬合 調整大小,' @ ' 旗標
|
![]() 裁剪擬合 調整大小,' ^ ' 旗標
|
方形填充和裁剪
上述填充和裁剪方法假設您知道要擬合圖像的區域的最終大小。但情況並非總是如此。有時您只想簡單地“將圖像方形化”,方法是將其“填充”(外部方形)或“修剪”邊緣(內部方形)。從 IM 論壇上的方形圖像,開發了許多方法。可以使用馬賽克通過旋轉圖像的副本來創建更大的背景畫布來完成外部方形化。
|
![]() |
|
![]() |
|
![]() |
|
![]() |
![]() ![]() |
IMv7 將允許您直接在裁剪或範圍參數中執行上述數學運算,這將防止圖像元數據丟失。 |
手動裁剪
我為我的網頁生成縮略圖圖像的通常方式是自動和手動腳本的混合。我的圖像的最終設置是..- 我將 PNG 或 TIFF 用於照片的原始“非常大”掃描件。或者從數碼相機下載的原始 JPEG 圖像。基本上用於未修改的原始源圖像,用於存檔。我現在也喜歡在此圖像文件名中包含字符串“
_orig
”。 - 當點擊或選擇縮略圖時,用於網頁可查看圖像的較小 JPEG 圖像格式。此圖像的大小調整為適合 800x800 像素的框,此大小適合大多數網絡用戶查看。我通常在文件名中添加“
_md
”表示中等大小的圖像。 - 最後是一個 GIF 縮略圖,調整為固定高度 90 像素和可變寬度。這使得網頁上的縮略圖中心行看起來整齊有序,但無論使用什麼尺寸的瀏覽器,都可以自動填充瀏覽器窗口的寬度。我現在通常在圖像文件名中包含“
_tn
”,表示它是縮略圖。
magick mogrify
」從原始掃描圖像生成網頁可檢視的 JPEG 圖像(中等大小)。這可以減少圖像的下載時間和檢視大小,使其對於一般網路使用者(可能透過數據機登入)來說更為實用。然後,我使用「magick mogrify
」從這些圖像生成一組初始縮圖。然而,我經常發現,在典型的照片中,縮圖的主體在檢視時會變得太小,無法形成有效的縮圖。為了修正這個問題,我會檢查自動生成的縮圖,並在大約一半的情況下手動建立我自己的「主體放大」縮圖。我會讀取 JPEG 圖像,並將其裁剪到圖像的主要主體,有效地「放大」照片的主體,並移除圖像的大部分背景。然後,使用「magick -thumbnail
」或更常見的我用於檢視和裁剪圖像的圖形程式(通常是「XV
」,見下文)對其進行平滑處理和縮圖。因此,與照片中的人幾乎看不見的縮圖(左)不同,我在縮圖之前,手動裁剪了主體周圍,突出了照片的重點(右)。這使用戶可以更清楚地看到圖像內容,從而更好地決定是否要下載和檢視更大的 JPEG 版本圖像。
昆士蘭風箏愛好者,Ron 和 Val Field | ||
![]() 自動 生成 縮圖 |
![]() |
![]() 手動裁剪 並調整大小 縮圖 |
(點擊任一圖像以查看原始掃描照片) |
magick mogrify
」會覆蓋任何現有的、可能是手動生成的縮圖,因此在執行任何手動縮圖生成後,您將無法再次使用它。「magick mogrify
」命令很有用,但也很危險,因為它會覆蓋大量圖像。在對所有圖像全局運行「magick mogrify
」之前,請務必三思。 HTML 縮圖頁面
在目錄中整理好所有縮圖圖像後,我會使用一個名為「thumblinks
」的特殊 Perl 腳本,我編寫這個腳本是為了查找圖像(JPEG 照片和 GIF 縮圖),並生成 HTML 連結,甚至是完整的 HTML 照片頁面。該腳本將讀取 GIF 縮圖的大小並將其包含在 HTML 中,並在縮圖連結周圍附加預先準備好的頁首和頁尾文件。如果腳本在頁首或頁尾文件中找到現有的連結,它也會從生成的列表中移除任何縮圖連結。這聽起來可能很複雜,但它使我的 HTML 頁面生成變得非常快速和靈活,並確保目錄中所有縮圖圖像都已添加到該目錄的索引頁面中,同時仍然允許我在索引頁首中對特定圖像進行評論。它還使頁面獨立於使用者的窗口大小,自動調整以適應。有關我的「thumblinks
」腳本輸出的簡單範例,請參閱古墓藝術品。有關生成此類連結的快速範例和起點,請查看使用identify 命令的範例。 FavIcon 網頁連結縮圖
「favion.ico
」圖標是網路瀏覽器經常在網站的頂級網頁上查找的圖標,用於整個網站。該圖像是一種特殊的多解析度圖像格式,可以按如下方式創建。
magick image.png -alpha off -resize 256x256 \ -define icon:auto-resize="256,128,96,64,48,32,16" \ favicon.ico |
image.png
」 可以是任何你想要顯示的圖片,但應該是正方形的。如果它不是正方形,則應該先將其轉換為正方形。你也可以加入更大的解析度,例如 128 或 256 像素,但很少瀏覽器會使用它們。16 和 32 像素大小在 ICO 檔案中更常使用,因此特別強調這些大小可能會有幫助。同時請記住,許多瀏覽器會減少圖片的顏色數量,以減少儲存在使用者書籤檔案中的空間。這帶我們到另一個重點。由於通常只使用最小的圖片,並且會進一步減少顏色,因此建議將圖片保持盡可能小和清晰。以下是以手動方式調整 ICO 檔案格式的圖片大小的範例。
magick image.png -background white \ \( -clone 0 -resize 16x16 -extent 16x16 \) \ \( -clone 0 -resize 32x32 -extent 32x32 \) \ \( -clone 0 -resize 48x48 -extent 48x48 \) \ \( -clone 0 -resize 64x64 -extent 64x64 \) \ -delete 0 -alpha off -colors 256 favicon.ico |
如前所述,通常只會使用在網站頂層目錄中找到的「
favion.ico
」圖片,但是你也可以透過將以下 HTML 標籤新增到頁面的標題中,來指定連結縮圖圖片的位置…
<LINK REL="icon" HREF="/path/to/favicon.ico" type="image/x-icon"> <LINK REL="shortcut" HREF="/path/to/favicon.ico" type="image/x-icon"> |
/path/to/favicon.ico
」可以是瀏覽器應該從中擷取網頁縮圖圖片位置的絕對或部分 URL/URI。「REL="shortcut"
」的使用特定於 Internet Explorer(IE9 之前),並且不是 HTML 規範的官方部分。可以將兩個 HTML 標籤合併在一起,使用「REL="shortcut icon"
」,但是透過將標籤分開,你可以將非 ICO 圖片檔案格式(例如 SVG)用於非 IE 瀏覽器,例如 Firefox。請記住,如果沒有使用此 html 元素,則會改用在網站頂層目錄中找到的「favicon.ico
」檔案(如果有的話)。所有現代瀏覽器都普遍理解 ICO 圖片格式。除了 Internet Explorer 之外,所有瀏覽器也可以使用 JPEG、PNG 和 GIF 圖片檔案格式作為連結縮圖。少數瀏覽器,如 FireFox,甚至可以使用動畫 GIF 或 SVG 圖片檔案格式。但是,由於這些後來的格式通常無法容納具有不同解析度和顏色數量的多個圖片,因此對於「favion.ico
」圖片,最好還是堅持使用 ICO 檔案格式。其他非 IM 技術
我用於手動圖片處理的「XV
」程式也會產生縮圖圖片,放置在名為「.xvpics
」的子目錄中。此目錄中圖片的格式是程式本身特殊的縮圖格式(忽略該目錄中的檔案名稱後綴)。這些縮圖限制為 80x60 像素,因此尺寸有點「小」(除非你修改「xv
」以使用更大的縮圖 - 請參閱下面的連結)。IM 可以理解「xv
」縮圖格式(它基於「NetPBM
」圖片格式),因此你可以使用 XV 快速產生所有縮圖,然後將 JPEG 圖片的 XV 縮圖轉換為 GIF 圖片,以進行進一步處理…xv -vsmap & # generate thumbs with the "Update" button rm .xvpics/*.gif # delete XV thumbs of existing "gif" thumbnails magick mogrify -format gif .xvpics/*.jpg mv .xvpics/*.gif . # move the new "gif" thumbnails to original dir如果你厭倦了 XV 縮圖的小尺寸,特別是在現代的大型顯示器上,你可以修改 XV 程式碼。請參閱我的 XV 修改說明,它可以讓你讓 XV 使用更大的縮圖尺寸。我自己使用 120x90 像素的縮圖。
進一步處理 - 新增裝飾
以上只是讓你的縮圖更有趣的開始。除了基本的縮圖圖片之外,你還可以新增邊框、旋轉,甚至可以隨機選擇樣式,讓你的縮圖畫廊更加有趣。像這樣對縮圖的添加,我稱之為「裝飾」,就像你在洗完衣服後在衣服上發現的額外棉絮一樣。也就是說,它為縮圖增添了不必要的額外元素,但可以讓網頁和索引圖片更加有趣。請注意,以下許多方法和處理都非常複雜,我可能需要更深入地了解 ImageMagick 的各種圖片處理選項。新增圖片標籤
在建立縮圖時,您也可以在縮圖上方、下方或甚至頂部添加標籤。 然而,這種類型的圖像處理會在使用標籤標註圖像中有更詳盡的說明。 請記住,在這些範例中,請使用“-thumbnail
”或“-strip
”,而不是“-resize
”。例如...
|
![]() |
|
![]() |
thumbnail.gif
”圖像,也沒有使用縮圖調整大小運算符從圖像中刪除配置文件和註釋。 然後,我使用“+clone
”、“+sample
”和“-alpha
”來生成一個更大的透明工作畫布,其中還包含原始圖像中繼數據的副本。 這讓我可以使用圖像的“註釋”字符串和標註“-annotate
”運算符來提供要覆蓋在圖像上的文字。 只有在我完成了文字疊加後,我才會清理並使用“-strip
”刪除這些信息。 凸起按鈕
“-raise ”運算符的創建基本上是為了突出顯示矩形圖像的邊緣以形成凸起的按鈕。 它是一種簡單、快速且有效的縮圖轉換。
|
![]() |
相同的運算符還有一種“加號”形式,可用於產生凹陷的突出顯示效果。
|
![]() |
氣泡按鈕
通過一些技巧,“-raise
”運算符可用於產生平滑的“氣泡狀”凸起按鈕。
magick thumbnail.gif -fill gray50 -colorize 100% \ -raise 8 -normalize -blur 0x8 bubble_overlay.png magick thumbnail.gif bubble_overlay.png \ -compose hardlight -composite bubble_button.png |
![[IM Output]](thumbnail.gif)

![[IM Output]](bubble_overlay.png)

![[IM Output]](bubble_button.png)
添加邊框
簡陋而簡單的“-border
”運算符可用於在圖像周圍生成一些複雜的框架。
|
![]() |
簡單相框
類似地,“-frame ”運算符可以輕鬆地在圖像周圍添加框架
|
![]() |
蒙太奇相框
montage 命令提供了一種更簡單的方法來完成上述所有操作,甚至更多。 它不僅可以生成縮圖(或整個縮圖頁面),還可以標記縮圖以包含文件名、磁盤大小和尺寸等信息,或用戶指定的字符串。以下是使用“magick montage ”生成帶框縮圖的簡單示例。
wrjpgcom ”很久以前添加到圖像中的。 有關更多詳細信息,請參閱非 IM JPEG 處理。 |
![]() |
即使只使用“magick montage ”,您也可以在生成縮圖時獲得非常棒的效果。
|
![]() |
柔和模糊邊緣
暈影運算子提供了一個簡單的方法來為圖像添加模糊邊緣。
|
![]() |
|
![]() |
10\!
「距離縮放」標記控制。這僅在 IM v6.6.1-6 中添加。這也具有適用於形狀圖像的額外優勢,儘管需要更複雜的初始化才能在距離公式中正確保留和抗鋸齒像素。有關更多詳細資訊,請參閱使用距離羽化形狀。此處的羽化是純線性漸變,可以使用S 形非線性對比度運算子進一步調整,使其以多種不同方式呈現更平滑、更漸變的外觀。您也可以使用使用模糊羽化圖像,方法是在僅模糊 Alpha 色版之前添加透明的虛擬像素。這會為圖像產生更柔和的羽化效果,並顯著圓潤圖像的角落。
|
![]() |
-level
」操作(僅調整透明度色版)確保邊緣變得完全透明,而不僅僅是半透明。然而,由於模糊產生的類 S 形曲線,它在實際邊緣確實會急劇下降至零。它在角落中也具有累加效應,導致它們變圓,而對於具有尖銳凹面的形狀圖像,它會導致完全透明的像素變得半透明。因此,對於形狀,您可能需要針對原始圖像遮罩結果(使用Dst-In 合成)。然而,對於矩形縮略圖,結果令人滿意。您可以在分層縮略圖中看到使用這種羽化類型的另一個範例。如果不在模糊的羽化上進行色階調整,則可以在「50%
」處閾值化模糊的 Alpha 色版,以便為上述縮略圖圖像添加偽圓角。
|
![]() |
-blur
」操作可能會變得非常慢。因此,完全不建議使用這種方法來大規模圓潤角落。如需更不尋常的模糊邊緣效果,您可以在 Alpha 色版上使用徑向模糊。
|
![]() |
|
![]() |
圓角和形狀邊角
雖然對柔化模糊邊緣(見上文)進行臨界值處理會產生適合 GIF 布林透明度的圓角,但它不會產生平滑的「抗鋸齒」圓角。產生具有圓角或任何其他形狀的圖像的正確方法,是使用所需形狀的遮罩實際切掉每個角落。以下是由 Leif Åstrand <leif@sitelogic.fi> 提供的方法,透過將完整圖像遮罩相乘來產生適當的結果。
|
![]() |
|
![]() |
紅色
」),而不是使其透明。
|
![]() |
![]() ![]() |
由於「-flip 」和「-flop 」運算符無法正確處理虛擬畫布偏移,因此最後一個範例在 v6.6.6-5 之前的 IM 版本中將會失敗。 |
|
![]() |
撕紙邊緣
Leif Åstrand <leif@sitelogic.fi> 貢獻了以下 IM 代碼來生成看起來像是從纖維紙(如報紙)上撕下來的邊緣...
|
![]() |
|
![]() |
添加陰影
「-shadow
」運算符可以輕鬆生成陰影的任何形狀的圖像。例如,這裡我為縮略圖添加了一個半透明的彩色陰影。
|
![]() |
但您也可以輕鬆創建柔和的模糊陰影。
|
![]() |
-background
」顏色,因為這些格式無法處理半透明顏色。警告:雖然以上方法適用於單個縮圖,但當您想要將多個縮圖相互疊加時,它通常會失敗。原因是陰影不會像普通圖像那樣累積在一起。要了解如何處理多個分層圖像的陰影,請參閱陰影層。添加一些厚度
為圖像或形狀添加厚度看起來有點像添加硬陰影(見上文),但並不完全相同,需要一些額外的工作才能做到正確。這實際上非常棘手,因為我們建立了一個彩色圖像蒙版,然後將其複製多次並分層放置在原始圖像下方(使用「DstOver
」合成),並增加偏移量以賦予圖像厚度。
|
![]() |
\( +clone ... \)
」都會在東南方向為圖像添加一個額外的像素。此外,由於不涉及半透明像素(至少對於矩形圖像而言),因此您可以對結果使用 GIF 圖像格式。這種技術的主要問題是,除非您編寫特定的腳本來添加厚度,否則很難將厚度指定為可變參數或以不同的角度指定厚度。此外,厚度角度部分的邊緣沒有經過抗鋸齒處理,因此還有很大的改進空間。拍立得風格縮圖
您可以讓您的縮圖看起來像一張拍立得照片,為它添加陰影,甚至稍微旋轉一下,使其看起來像是放在桌子上。
|
![]() |
IM v6.3.1-6 中添加了一個更複雜的上述版本,作為「-polaroid 」轉換運算符。例如...
|
![]() |
您甚至可以添加「-caption 」,設置您自己的陰影顏色,指定您自己的旋轉角度(或完全不旋轉)。
|
![]() |
|
![]() |
![]() ![]() |
上面示例中嵌入的命令「 `magick ...` 」會生成一個介於 -15 到 +15 之間的隨機浮點數。有關將 IM 用作數學計算器的更多信息,請參閱FX 表達式。另一種方法是將隨機數分配給 Shell 變量,並將其替換到上述命令中。 |
|
![]() |
|
![]() |
- 框架已硬編碼到上面,並取決於縮略圖圖像的大小。在實際應用中,框架可以移動到縮略圖生成階段,而不是在上面的照片跨頁中。
- 由於“` -rotate `”也會擴展畫布的大小,因此添加圖像的位置會發生變化,除非您使用“` -gravity center `”位置的偏移量放置它們。
- 最後,不斷旋轉背景框架在質量方面不是一個好主意。旋轉已經旋轉的圖像,與在疊加之前對每個單獨的圖像執行一次旋轉相比,會在結果中添加更多像素級別的失真。
框架技術
在這裡,我們將介紹一些先進的框架技術,這些技術使用了一些關於 IM 如何工作的非常先進的知識來實現所需的結果。自框架(外部)
**自框架**是一種可以使用圖像本身生成框架顏色和圖案來為圖像添加框架的技術。也就是說,添加的框架不是固定的,而是會有所不同,以便大致匹配被框架的圖像。您可以通過兩種方式做到這一點。擴展原始圖像以建立*外部框架*,或使用實際圖像本身的一部分來建立*內部框架*。例如,如果我們放大圖像並使其變暗,然後將原始圖像疊加在頂部,我們會得到一個非常漂亮的框架。
|
![]() |
![]() ![]() |
除了使用級別調整來增亮(或變暗)框架圖像之外,使邊框顏色更亮或更暗的另一種方法是使用類似...的內容對框架進行顏色著色。 “`-fill white -colorize 30%`” |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
imageborder
”,可以更輕鬆地製作自定義邊框圖像,邊框由原始圖像的模糊放大版本生成,或者某種形式的 虛擬像素 設定定義內容。 自訂相框(內部)
我們可以將圖像本身的部分放大成邊框,而不是放大圖像以添加新邊框。我們已經看到了一些在圖像本身內部添加邊框的技術。凸起按鈕 和 氣泡按鈕 技術使用“-raise
”運算符來做到這一點。在這裡,我們生成原始圖像的較亮模糊版本,然後使用也從原始圖像生成的遮罩覆蓋它。然後添加白色邊緣以將較亮的模糊版本與圖像中心未修改的部分分開。
|
![]() |
|
![]() |
VividLight
”合成與帶框的遮罩圖像一起使用,以更好地保留原色。
|
![]() |
強光
」合成模式,它不會增強原色,並帶有模糊的邊框光照遮罩。
|
![]() |
![]() ![]() |
某些光線合成方法可能需要您在合成之前交換圖像才能獲得正確的光照效果。 |
簡單邊框疊加
一種簡單的邊框類型是創建一個精美的邊框,或形狀圖像,您可以在其中放置您的圖像,位於邊框下方。例如,在這裡,我們生成了一個簡單的邊框,比我們的圖像稍大,並帶有一個形狀奇特的孔。形狀是從「WebDings
」字體(字符「Y
」)中提取的,但有很多可能的來源可以用於圖片邊框的奇特形狀。
|
![]() |
您還可以選擇使用陰影效果為邊框增添一些深度。
|
![]() |
現在我們有了一個簡單的疊加邊框,我們可以使用「DstOver 」合成模式將圖像放置在中心下方,位於邊框下方。
|
![]() |
magick thumbnail.gif autumn_leaves.png +swap \ -gravity center -compose DstOver -composite \ border_leaves.gif |
![[IM Text]](thumbnail.gif)

![[IM Text]](../images/autumn_leaves.png)

![[IM Text]](border_leaves.gif)
DstOver
」將第二張主圖像放置在邊框「下方」。這樣,決定圖像最終大小的是邊框,而不是原始圖像。但是,這樣做也會丟失主圖像具有的任何元數據(出於相同的原因)。如果您真的想保留縮略圖的元數據(例如標籤和註釋,例如版權聲明),那麼最好的方法是將縮略圖填充到與邊框相同的大小,然後使用默認的「Over
」合成模式來疊加邊框。這樣,縮略圖就是「目標」圖像,並且保留了它的圖像元數據。 徽章疊加範例
這是另一個更複雜的預先準備好的疊加範例,這次使用來自 IM 論壇討論複合疊加和遮罩的正確大小的圖像(使用範圍作為裁剪方法)。請注意,圖像本身沒有變形,只是稍微變亮和變暗,切出一個圓圈並添加了陰影,所有這些都在一張疊加圖像中完成。如果這是一個真正的徽章或「玻璃氣泡」,那麼圖像也應該稍微扭曲一點(也許使用桶形失真),但即使沒有這種失真也能很好地工作。有關「徽章」範例的下一步,請參閱使用遮罩和繪畫的徽章,它在徽章外部添加了背景透明度。遮罩與繪製技術
在很多情况下,您不僅希望在图像周围覆盖方形边框,还希望将图像边缘裁剪为透明。为此,您通常会使用至少两张图像。一个是蒙版覆盖图,包含要添加到现有图像的颜色、阴影和高光。第二个图像包含要从原始图像中移除的部分。这两种图像可以通过两种不同的方式应用。您可以先“遮罩”以移除图像中不需要的部分,然后覆盖边框,或者您可以覆盖边框,然后将原始图像和覆盖颜色的不需要的部分遮罩为透明。您使用哪种方法至关重要,所涉及的图像将针对特定技术进行设计。您不能以错误的顺序使用一种方法的图像,否则将无法正常工作。例如,让我们创建更复杂形状的边框,但这次不必担心设置背景。
|
![]() |
为了更有趣,给这个“模糊”边框添加一些随机的颜色。
|
![]() |
好了,我们有了一个边框,但我们仍然需要一些方法来定义什么是边框的外部和内部。基本上,我们需要一个蒙版来定义这两个区域。
|
![]() |
magick thumbnail.gif -alpha set -gravity center -extent 120x100 \ border_ellipse_mask.png -compose DstIn -composite \ border_ellipse_red.png -compose Over -composite \ border_mask_paint.png |
![[IM Output]](thumbnail.gif)

![[IM Output]](border_ellipse_mask.png)

![[IM Output]](border_ellipse_red.png)

![[IM Output]](border_mask_paint.png)
|
![]() |
|
![]() |
圓角邊框
如上所述,遮罩與繪製技巧 不僅可以用於為圖像添加額外的顏色或「絨毛」,還可以刪除部分圖像,以塑造最終圖像。這為我們提供了一種為圖像添加圓角的替代方法。IM「-draw
」運算符帶有一個「roundrectangle
」方法,可用於在圖像周圍提供有趣的邊框。但是,您需要調整此繪製方法的尺寸以匹配圖像。IM 確實提供了基於圖像大小提取甚至進行數學計算的方法。定位矩形的坐標用於定義矩形的筆劃寬度(可以是浮點值)的確切「中心」。此外,它以「像素坐標」表示(請參閱 像素與圖像坐標),這意味著值 1,1 是指從頂部和左側邊緣開始的第二個像素,但更重要的是,它指的是實際上距離真實頂部和左側邊緣 1.5 個單位的像素「中心」。現在我們將使用 3 的筆劃寬度 (SW),這會使圖像在所有側面都增大 3 個像素。這意味著矩形將定位在距離左上角 SW/2 - 0.5
或 1.0 個像素處,以及距離右下角 ImageSize + SW*1.5 - 0.5
或圖像大小 + 4 個像素處。在這裡,我們使用 IM 本身來執行這些計算,使用精美的 FX 轉義符 生成所需的確切繪製命令。這會保存為 Magick 向量圖形文件,以後的命令中的繪製可以直接使用。
|
![]() |
![]() ![]() |
如果您能以其他方式(使用 shell 或其他 API 語言包裝器)找出圖像大小,則可以將適當的繪製參數直接替換為下一個示例,而不是使用 FX 數學表達式。基本上,以上操作使整個過程獨立於縮略圖的實際大小。任何其他方式,包括直接硬編碼也是可以接受的。 |
magick thumbnail.gif -border 3 -alpha transparent \ -background none -fill white -stroke none -strokewidth 0 \ -draw "@rounded_corner.mvg" rounded_corner_mask.png magick thumbnail.gif -border 3 -alpha transparent \ -background none -fill none -stroke black -strokewidth 3 \ -draw "@rounded_corner.mvg" rounded_corner_overlay.png |
![[IM Text]](rounded_corner_mask.png)
![[IM Text]](rounded_corner_overlay.png)
|
![]() |
|
![]() |
使用遮罩與繪製的徽章
這是一個更複雜的「遮罩與繪製」示例,它是從之前在上面的 徽章疊加 示例中使用的圖像開發而來的。兩幅圖像的生成是「偽造的」,並在 IM 論壇 複合疊加和遮罩 中進行了討論。理想情況下,這兩幅圖像應該一起開發。
magick thumbnail.gif -alpha set -gravity center -extent 90x90 \ badge_mask.png -compose DstIn -composite \ badge_shading.png -compose Over -composite \ badge_trans_bg.png |
![[IM Text]](thumbnail.gif)

![[IM Text]](../images/badge_mask.png)

![[IM Text]](../images/badge_shading.png)

![[IM Text]](badge_trans_bg.png)
繪製與遮罩技術
您可以使用一組不同的圖像,並先覆蓋其他顏色,然後再遮罩背景,而不是“先遮罩後繪製”。 也就是說,您可以執行“先繪製後遮罩”。 也就是說,您將使用您的圖像,並覆蓋邊框,該邊框不僅設置了所有最終邊框顏色,還遮罩並著色了原始圖像部分外部的部分或全部部分。 然後,您使用單獨的“外部”或“剪切”遮罩來移除結果圖像中所有不需要的部分。另請注意,“覆蓋”和“遮罩”圖像都將內邊緣與邊框的外邊緣分開定義。 因此,一張圖像無法在一張圖像中完全定義整個邊框,這可能會使其使用起來有點困難。 但是,它可以更易於實現。 例如...
magick -size 120x90 xc:none -fill black -stroke black -strokewidth 0 \ -draw 'ellipse 45,45 55,37 0,360' \ -channel RGBA -negate -blur 0x3 +channel \ \( granite: -auto-level -blur 0,0.7 \) \ -compose ATop -composite border_paint.png magick -size 120x90 xc:none -fill black -stroke black -strokewidth 5 \ -draw 'ellipse 59,45 56,40 0,360' border_mask.png magick thumbnail.gif -alpha set \ border_paint.png -compose Over -composite \ border_mask.png -compose DstIn -composite \ border_paint_mask.png |
![[IM Output]](thumbnail.gif)

![[IM Output]](border_paint.png)

![[IM Output]](border_mask.png)

![[IM Output]](border_paint_mask.png)
捲頁角
Fred Weinhaus 創建了一個名為 PageCurl 的特殊 Shell 腳本,它將使用一些非常複雜的數學(在 Shell 中)向現有圖像添加簡單的捲曲頁面。 例如...
|
![]() |
-i "pagecurl"
”選項)。
|
![]() ![]() |
pagecurl_overlay.png
”和“pagecurl_mask.png
”所示。 輸入圖像本身無關緊要,因為我們想要的是遮罩圖像。 “捲曲頁面”結果只是使用特殊的“null:
”圖像文件格式丟棄的。
|
![]() |
-gravity
」設定可確保將兩個重疊圖像放置在右下角。而特殊的定義設定「compose:outside-overlay=false
」將防止遮罩圖像擦除較小圖像未覆盖的图像部分。有關完整說明,請參閱外部重疊設定。如果您想將其應用於許多圖像,則可以使用「magick mogrify
」,使用一種特殊的技術,涉及使用「-draw
」來執行Mogrify Alpha 合成。但是,此合成方法無法理解特殊的定義設定,因此它僅適用於大小相同的圖像、重疊和遮罩。
pagecurl -e 0.5 -i /tmp/pagecurl {one image} null: magick mogrify {magick mogrify -format and -path options} -alpha set \ -draw 'image Over 0,0 0,0 "/tmp/pagecurl_overlay.png"' \ -draw 'image DstIn 0,0 0,0 "/tmp/pagecurl_mask.png"' \ {all images to be pagecurled}... |
花式邊角疊加
在這裡,我們將更深入地瞭解如何使用這種「雙重遮罩」技術以不同方式修改圖像的不同區域,而不是將單個大型遮罩或框架應用於整個圖像。在這種情况下,我們只會對角落進行雙重遮罩。其餘的邊框(以匹配)是單獨添加的。![[IM 輸出]](../images/fancy_orig.gif)
![[IM 輸出]](../images/fancy_sub.gif)
![[IM 輸出]](../images/fancy_add.gif)
|
![]() |
![]() ![]() |
請注意,要保留正在添加的透明邊框,您必須將「-compose 」設定為「Copy 」而不是默認值「Over 」。如果不这样做,則透明度將由添加的下一個邊框顏色填充,在本例中為「黑色」。有關詳細信息,請參閱邊框運算符。 |
使用繪製與遮罩的徽章
先前的徽章疊加和徽章遮罩與繪製中看到的相同徽章圖像處理,也可以通過先繪製後遮罩來完成。在這裡,我們首先繪製所有顏色和陰影,然後遮罩出圖像的最終透明度。
magick thumbnail.gif -alpha set -gravity center -extent 90x90 \ badge_paint.png -composite badge_shape.png -compose DstIn -composite \ badge_paint_mask.png |
![[IM Text]](thumbnail.gif)

![[IM Text]](badge_paint.png)

![[IM Text]](badge_shape.png)

![[IM Text]](badge_paint_mask.png)
光照遮罩技術
玻璃氣泡按鈕
縮略圖處理的下一個複雜級別是非常複雜的光照效果的應用。這裡的訣竅不在於對圖像應用光照效果,而在於生成適當的陰影效果。例如,使用Aqua 效果,您可以為縮略圖提供非常複雜的陰影效果,使其看起來像是被“氣泡”玻璃包裹著。此外,這在具有圓角的縮略圖上效果更好。讓我們使用純灰色為我們的縮略圖圖像生成一個圓角遮罩。
|
![]() |
|
![]() |
|
![]() |
然而,我們可以更進一步,直接將陰影效果添加到此光照遮罩。添加的顏色必須是純黑色,並且您需要確保選擇的光照效果合成會使圖像在光照遮罩為黑色的情況下也完美呈現黑色。然而,這實際上是陰影效果通常添加到圖像的方式,因此您可以直接將陰影添加到“光照效果遮罩”中,一切都會順利!添加光照“光暈”也是如此,但僅使用白色像素進行光暈疊加。從本質上講,“光照效果圖像”可以再次將兩個 遮罩與繪製 圖像合併回單個圖像。正如您將在下一個示例中看到的那樣。
使用光照效果的徽章
使用 使用遮罩與繪製的徽章 技術中的圖像,我將它們應用於純灰色畫布圖像,以便快速生成“遮罩光照效果”圖像,實際上我也可以輕鬆使用其他遮罩樣式(使用繪製與遮罩的徽章)。然後,我將單個遮罩圖像應用於縮略圖,以重現所需的結果。
# merge "mask 'n' paint" images with a gray image, # to create a "lighting mask" magick -size 90x90 xc:gray50 -alpha set \ badge_mask.png -compose DstIn -composite \ badge_shading.png -compose Over -composite \ badge_lighting.png # Apply the single "lighting mask" magick thumbnail.gif -alpha set -gravity center -extent 90x90 \ badge_lighting.png \ \( -clone 0,1 -alpha Opaque -compose Hardlight -composite \) \ -delete 0 -compose In -composite \ badge_final.png |
![[IM Text]](thumbnail.gif)

![[IM Text]](badge_lighting.png)

![[IM Text]](badge_final.png)
使用扭曲遮罩圖像...
更不可思議的是,由於陰影顏色只是一幅灰度圖像,您可以將光照效果壓縮為一個顏色通道和 Alpha 通道遮罩。然後,這可以用於釋放兩個顏色圖像通道,以用於其他圖像處理效果!也就是說,您可以在單個“遮罩圖像”中存儲其他內容。具體來說,您可以在同一個遮罩圖像中添加扭曲效果!有關這方面的更多信息,請參閱 統一扭曲圖像,它正是這樣做的!一種終極遮罩圖像。使用邊緣圖像進行框選
![[IM Image]](../images/oak_frame_sample.jpg)
邊框邊緣圖像
可以使用多種類型的圖像來為圖像製作邊框。 例如,這裡是一個「金色飾邊的黑色細邊框」,它是從 Michael Slate <slatem_AT_posters2prints.com> 提供的圖像修改而來的。有兩張圖像,用於提供兩種不同的照明效果,一張用於頂部和左側邊緣,另一張用於底部和右側邊緣。 然而,沿著圖像長度的顏色不會改變。 因此,您可以平鋪或拉伸此邊框以產生所需的長度。 這一組類似的邊框片段是這個「薄的華麗金色」可平鋪邊框圖像。由於這些圖像具有一些精細的細節,因此您不能僅僅將圖像拉伸到所需的長度。 您也不能僅僅矩形旋轉這些片段來產生其他邊緣片段,因為這樣做會使精細細節的陰影錯誤。 然而,對角線轉置變形應該可以為其他邊緣獲得正確的陰影。 建議在查看結果時格外小心,以確保圖像所有四個邊緣上的整體陰影和精細細節陰影都是正確的。 最後,邊框圖像可能只包含一個可以用於生成所有邊框邊緣的圖像,例如這個“竹子”平鋪邊框圖像。只需要一張圖像的原因是邊框沒有特定的“內部”或“外部”。 儘管邊框確實具有整體和精細的細節照明效果,但您需要再次注意如何為其他邊緣旋轉/翻轉/轉置圖像。 這個邊框更大的問題是,如果您只是簡單地將其平鋪,宏觀細節會變得非常規則,因此您可能需要隨機化平鋪偏移,甚至隨機化拼接在一起的片段的長度,以便賦予它更自然的外觀。 稍後將詳細介紹。 如您所見,邊框圖像可以有多種樣式,並且在生成其他缺失的邊緣圖像時,必須注意以正確的方式處理所選的邊緣圖像(關於照明圖像)。加長邊框片段
現在,在使用這些邊框圖像時,我們需要創建更長的片段來覆蓋圖像尺寸的長度。這只有兩種基本方法可以做到。您可以簡單地使用調整大小(不保留縱橫比)來拉伸邊框圖像,以獲得正確的長度。這適用於上面顯示的第一組片段,它們沒有內部細節,但不適用於呈現的任何其他邊框圖像。基本上,它會扭曲內部細節,並可能分散最終圖像的外觀。但是,另一種加長方法,平鋪,可以用於任何具有重複圖案或細節的邊框圖像,上面呈現的所有圖像都是這種情況。如果您要創建自己的邊框片段,請注意拼貼必須正確匹配,並且要匹配像素邊界,以確保邊框圖像中的顏色一致且細節循環正確。如果沒有,您會在拼貼之間看到一個看起來很假的人工接縫,因為拼貼的重複,這個接縫會變得非常明顯。在現實世界中,相框製造商在將片段連接在一起以製作更長的片段時也會遇到同樣的問題。基本上,很容易得到兩種不同深淺的木材,或者紋理非常不同的木材,當它們“鳩尾榫”連接在一起時,接縫就會非常明顯。所以,你不是唯一一個遇到這個問題的人。“竹子”邊框圖像需要平鋪。雖然細節僅限於圖像上的一小塊區域,但您可以獲得一些有趣的隨機平鋪效果,這可能需要對片段進行一些隨機的加長和縮短才能消除。不過,我不會深入探討這個問題,我將把它留給那些有興趣的人作為練習。對於我們的示例,並且因為它適用於幾乎所有邊框圖像,我將使用一種簡單的恆定平鋪方法來生成所需的較長邊緣長度。過度簡化的附加
我們可以通過將上面的簡單“竹子”邊框平鋪到正確的長度,然後將圖像附加在一起來加長它。平鋪是通過特殊的平鋪畫布圖像生成器“tile:
”完成的,用於平鋪正在讀取的圖像。
|
![]() |
|
![]() |
擴展疊加相框
此外,通過將邊框延伸到原始圖像的邊界之外,您可以使這種邊緣邊框看起來更好。這在“甜蜜的家”類型的圖片中很常見。為此,您需要先放大原始圖像,並留出大量額外空間,以便將較長的邊框片段覆蓋在上面。
magick thumbnail.gif -alpha set -bordercolor none -border 34 \ \( -size 144x14 -tile-offset +30+0 tile:bamboo.gif -transpose \) \ -geometry +20+10 -composite \ \( -size 144x14 -tile-offset +45+0 tile:bamboo.gif -transpose \) \ -geometry +154+0 -composite \ \( -size 178x14 -tile-offset +60+0 tile:bamboo.gif \) \ -geometry +0+20 -composite \ \( -size 178x14 -tile-offset +0+0 tile:bamboo.gif \) \ -geometry +10+124 -composite \ frame_overlaid.gif |
![[IM Output]](frame_overlaid.gif)
45 度角拼接
更好的解決方案是以某種方式在縮略圖周圍添加邊框圖像,以便在邊框的每個角落實際創建一個 45 度的接縫。這並不容易,我嘗試了許多繪圖和遮罩方法,直到我重新發現了一個神奇的操作符,稱為框架,3D 類似邊框。然後解決方案就很簡單了。讀取圖像,然後「-frame 」它,以創建要構建框架的區域的模板。
|
![]() |
例如...
|
![]() |
|
![]() |
|
![]() |
-tile-offset
」,以便消除此镜像效果。![]() ![]() |
在 IM 版本 6.3.9-9 之前,平鋪偏移設置已損壞,因為「X」偏移量已同時用於「X」和「Y」偏移量值(給定的「Y」值被忽略)。這意味著在舊版本的 IM 中,上面的示例可能會錯誤地平鋪底部和右側邊緣。 |
|
![[IM Output]](framed_script.png)
frame_edges.tar.gz
」)。這個 tar 檔案包含腳本和一組邊框影像,腳本知道如何處理和使用它們。它還在邊框和影像本體之間添加了「紙板」邊界。