ImageMagick 範例 --
複合字體效果

索引
ImageMagick 範例前言與索引
複合字體 以各種樣式將文字繪製為圖像
平鋪填充漸層填充上下顛倒硬陰影傾斜陰影傾斜印章擠壓輪廓多色輪廓筆畫粗筆畫細筆畫雙重輪廓迷幻氣球連接重疊抖動模糊模糊陰影柔和陰影柔和輪廓更密集的柔和輪廓距離模糊陰影髒污印刷斜角圓錐形內斜角拱形弧形圓形颤音彗星煙霧
對字體使用遮罩圖像 在疊加之前移除圖像的某些部分
進階字體處理 擴展字體以產生更複雜的結果
更複雜的字體霓虹燈金屬
繪製文字只是 ImageMagick 眾多功能的開始。在這裡,我們將探討如何修改 IM 的基本文字繪製功能,以創建可在網頁和文件中使用的精美字體和特殊效果。

複合字體效果

單調的純文字圖像很無聊,但只要稍加努力,您就可以疊加和著色文字,以產生一些非常奇特和美妙的效果。為此,我們需要多次繪製文字、疊加不同的圖案和顏色,並應用一些可用的眾多圖像運算子,以便從原始、單調的文字中產生更有趣的特殊效果。請注意,其中許多效果除了我們正在使用的基本字體之外,還可以應用於其他圖像。特別是,您可以在剪貼畫圖像上使用這些效果。 平鋪字體:繪製字體時,您並不局限於使用固定顏色。您可以在字體上使用平鋪圖案。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -tile pattern:checkerboard   -annotate +28+68 'Anthony' \
           font_tile.jpg
[IM Output]
請注意,「-tile」設定會覆寫「-draw」運算子的任何「-fill」顏色。
從 IM v6.3.2 開始,您可以改用「-fill」設定來指定平鋪圖像。但是,不建議使用此方法,因為許多使用「-fill」顏色的運算子無法理解平鋪圖像,而會預設使用「黑色」。
您可以透過在設定 "-tile" 影像**之前**,指定 "-origin" 設定,來設定平鋪影像相對於背景影像原點的偏移量。影像會根據指定為填滿區塊時所指定的數量進行滾動。漸層字體:所使用的區塊不一定要很小,也可以是整個畫布的大小。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -tile gradient:   -annotate +28+68 'Anthony' \
           font_gradient.jpg
[IM Output]
上下顛倒的字體

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill Navy     -annotate 180x180+300+35 'Anthony' \
           font_upsidedown.jpg
[IM Output]
硬陰影:透過偏移量繪製兩次字體,您可以製作出簡單的「硬」陰影效果。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill black -draw "text 28,68 'Anthony'" \
           -fill white -draw "text 25,65 'Anthony'" \
           font_shadow.jpg
[IM Output]
傾斜陰影:由於 "-annotate" 字體繪製運算子可以分別旋轉垂直和水平維度,因此您可以指定一些奇怪的旋轉「傾斜」或「推移」字體。這對於製作怪異的陰影或製作您自己的斜體或傾斜字體非常有用。

   magick -size 320x115 xc:lightblue  -font Candice -pointsize 72 \
           -fill Navy      -annotate 0x0+12+55   'Anthony' \
           -fill RoyalBlue -annotate 0x130+25+80 'Anthony' \
           font_slewed.jpg
[IM Output]
如需文字旋轉效果的摘要表,請參閱註釋文字選項。當然,Candice 字體並不是顯示此效果的理想字體,而且可能需要新增其他細節才能使結果看起來更立體。例如,隨著距離模糊陰影傾斜字體:您也可以使用 "-draw" 來傾斜您的字體,不過這有點棘手,因為它涉及額外的 MVG(Magick 向量圖形)動作來扭曲繪圖表面。由於表面正在扭曲,因此最好在扭曲之前使用「translate」設定字體位置。

   magick -size 320x100 xc:lightblue  -font Candice -pointsize 72 \
           -fill Navy -draw "translate 28,68  skewX -20  text 0,0 'Anthony'" \
           font_slanted.jpg
[IM Output]
如需文字旋轉效果的摘要表,請參閱註釋文字選項。當然,Candice 字體並不是顯示此效果的理想字體,而且可能需要新增其他細節才能使結果看起來更立體。如果您有任何有趣的發現,請傳遞給我,以便與世界各地的人分享。
"-annotate" 和 "-draw skew?" 操作實際上都會旋轉繪圖表面的 X 軸和 Y 軸。這與在現有影像上使用 "-shear" 的效果不同,後者會拉長影像的推移軸,因此影像的高度(或寬度)不會因操作而改變。
浮雕字體:透過以較深、較淺和原始顏色繪製三次字體,您可以製作出類似印章的凹痕。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill black     -annotate +24+64 'Anthony' \
           -fill white     -annotate +26+66 'Anthony' \
           -fill lightblue -annotate +25+65 'Anthony' \
           font_stamp.jpg
[IM Output]
請注意最後一次繪製字體是如何擦除字體中間部分的。這只能在純色背景上完成,請參閱使用遮罩影像以了解如何在非純色的隨機背景上執行此操作。如果您交換兩種顏色,您當然會得到凸起的字體,而不是凹陷的字體。擠壓或 3D 方塊字體:可以透過多次重複字體來產生。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill gray -annotate +29+69 'Anthony' \
                      -annotate +28+68 'Anthony' \
                      -annotate +27+67 'Anthony' \
                      -annotate +26+66 'Anthony' \
                      -annotate +25+65 'Anthony' \
                      -annotate +24+64 'Anthony' \
           -fill navy -annotate +23+63 'Anthony' \
           font_extrude.jpg
[IM Output]
請注意,這**不是**簡單的陰影,而是繪製字體的適當加粗。這非常重複,可以用於任何「形狀」的影像。如需另一個範例,請參閱為縮圖新增厚度
外框字體:我們可以使用多個具有小位置偏移量的繪製來建立外框字體。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill black  -annotate +24+64 'Anthony' \
                        -annotate +26+64 'Anthony' \
                        -annotate +26+66 'Anthony' \
                        -annotate +24+66 'Anthony' \
           -fill white  -annotate +25+65 'Anthony' \
           font_outlined.jpg
[IM Output]
由於這也很重複,所以這不是一個好的描邊解決方案。由於 ImageMagick 允許您透過設定「-stroke」設定來繪製字體輪廓,因此存在更好的解決方案。(請參閱下面的描邊字體)。無論如何,像這樣多次重繪以產生輪廓對於預先準備好的剪貼畫圖像非常有用,例如您可以在網際網路上找到的那些。對於其他圖形庫和程式(例如來自「PHP」的「GD」等),其中無法使用「-stroke」設定,這也是一種有用的技術。顯示此描邊樣式的另一個原因是,在描繪具有非常尖銳點的字體時,結果可能會更好。例如,在這裡我們繪製了 12 次字體以顯示字體的尖銳點。這裡的輪廓也被繪製得更粗一些。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
            -draw "fill black text 27,67 'Anthony' \
                              text 25,68 'Anthony' \
                              text 23,67 'Anthony' \
                              text 22,65 'Anthony' \
                              text 23,63 'Anthony' \
                              text 25,62 'Anthony' \
                              text 27,63 'Anthony' \
                              text 28,65 'Anthony' \
                   fill white text 25,65 'Anthony' " \
           font_outlined_12.jpg
[IM Output]
您還會注意到,繪圖「-fill」顏色可以在「-draw」參數內更改。多色描邊:此技術有用的另一個原因是您在繪製字體時不限於一種描邊顏色。透過以精心設計的順序以 5 種不同的顏色重新繪製字體 12 次,您可以製作出色彩鮮豔的「立體」字體,並帶有一些邊緣顏色平滑處理。

   magick -size 320x100 xc:lightblue \
           -font Candice -pointsize 72  -gravity center \
           -draw "fill navy         text  2,2  'Anthony' \
                  fill navy         text  0,3  'Anthony' \
                  fill navy         text  3,0  'Anthony' \
                  fill dodgerblue   text  0,2  'Anthony' \
                  fill dodgerblue   text  2,0  'Anthony' \
                  fill dodgerblue   text -2,2  'Anthony' \
                  fill dodgerblue   text  2,-2 'Anthony' \
                  fill lavender     text -2,-2 'Anthony' \
                  fill lavender     text  0,-3 'Anthony' \
                  fill lavender     text -3,0  'Anthony' \
                  fill skyblue      text  0,-2 'Anthony' \
                  fill skyblue      text -2,0  'Anthony' \
                  fill blue         text  0,0  'Anthony' " \
           font_colourful.jpg
[IM Output]
有更好的方法來創建這樣的立體字體,但是這種方法有效、簡單,並且只使用少數幾種顏色,而不是整個顏色範圍。描邊(筆觸)字體:「-stroke」設定允許您直接繪製字體的輪廓。通常,筆觸顏色設定為「無」,因此不使用。筆觸的粗細隨「-strokewidth」而變化,預設值為 1。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill white  -stroke black  -annotate +25+65 'Anthony' \
           font_stroke.jpg
[IM Output]
這是一個筆觸寬度較粗為 3 的示例。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill white -stroke black -strokewidth 3 \
           -annotate +25+65 'Anthony'        font_stroke_3.jpg
[IM Output]
請注意筆觸顏色如何不僅吞噬字體的外部,還吞噬內部。如需更多詳細資訊,請參閱我的筆觸和筆觸寬度選項的結果。
粗筆觸:透過再次繪製字體第二次,但不開啟筆觸,線條的內部部分將被移除,從而創建更美觀的粗體描邊字體。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
           -stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
           -stroke none                 -annotate +25+65 'Anthony' \
           font_stroke_thick.jpg
[IM Output]
筆觸和筆觸寬度選項中,將進一步使用-stroke」設定,其中將更深入地探討繪圖運算符的方面。細筆觸:透過關閉填充顏色,您可以只保留字體的輪廓。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill none  -stroke black   -annotate +25+65 'Anthony' \
           font_stroke_thin.jpg
[IM Output]
雙描邊:透過使用多種筆觸粗細重新繪製,您可以產生雙描邊!第一次繪製可以使用任何填充顏色來填充字體的內部,或者像我們在這裡所做的那樣保留為無,以保留背景。但是,最後一次字體繪製必須使用「無」的填充設定完成,否則將不起作用。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
        -fill none  -stroke black  -strokewidth 3  -annotate +25+65 'Anthony' \
        -fill none  -stroke white  -strokewidth 1  -annotate +25+65 'Anthony' \
        font_stroke_double.jpg
[IM Output]
與之前的「蓋章字體」不同,以上內容不需要擦除字體的中間部分。因此,這將適用於任何背景,而不會產生複雜情況。迷幻字體:以類似的方式,透過在交換顏色的同時緩慢減小筆觸寬度大小,可以輕鬆產生迷幻輪廓效果。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
           -stroke black -strokewidth 25 -annotate +25+65 'Anthony' \
           -stroke white -strokewidth 20 -annotate +25+65 'Anthony' \
           -stroke black -strokewidth 15 -annotate +25+65 'Anthony' \
           -stroke white -strokewidth 10 -annotate +25+65 'Anthony' \
           -stroke black -strokewidth  5 -annotate +25+65 'Anthony' \
           -stroke none                  -annotate +25+65 'Anthony' \
           font_psychedelic.jpg
[IM Output]
您可以透過使用衝突的顏色、不同的筆觸寬度,甚至稍微移動字體位置,使其更加迷幻。嘗試看看你能想出什麼。氣球效果:在這裡,我做了與上面的「粗筆觸字體」完全相同的事情,但是純粹是偶然,我在重新繪製字體時使用了白色筆觸顏色。這導致字體有趣地放大,並帶有粗輪廓。「蓬鬆」的字體就像氣球一樣被充氣了。這只是表明,值得嘗試看看你能發現什麼。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
       -fill black  -stroke black  -strokewidth 5  -annotate +25+65 'Anthony' \
       -fill white  -stroke white  -strokewidth 1  -annotate +25+65 'Anthony' \
       font_balloon.jpg
[IM Output]

連體字元:透過使用小的負 字元空格字距調整 設定(新增於 IM v6.4.7-10)並繪製兩次字型(如上例所示),您可以使「粗體」字型中的所有字元連接在一起,以產生有趣的變化。

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -kerning -6  -strokewidth 4 -fill white \
          -stroke black   -annotate +28+68 Anthony \
          -stroke none    -annotate +28+68 Anthony \
       font_joined.jpg
[IM Output]
重疊字元:然而,這方面的一個變化是分別繪製每個字元,以便每個字元都疊加在前一個字元之上。

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -stroke black -strokewidth 4 -fill white \
          -stroke black -annotate  +28+68 A  -stroke none -annotate  +28+68 A \
          -stroke black -annotate  +90+68 n  -stroke none -annotate  +90+68 n \
          -stroke black -annotate +120+68 t  -stroke none -annotate +120+68 t \
          -stroke black -annotate +138+68 h  -stroke none -annotate +138+68 h \
          -stroke black -annotate +168+68 o  -stroke none -annotate +168+68 o \
          -stroke black -annotate +193+68 n  -stroke none -annotate +193+68 n \
          -stroke black -annotate +223+68 y  -stroke none -annotate +223+68 y \
          font_overlapped.jpg
[IM Output]
但是,這需要您(手動或使用腳本自動)計算每個字元的適當位置。每個字元的自然寬度可以通過在没有任何「-strokewitdh」設定的情況下產生每個字元的標籤來確定。有關示例,請參見 確定字型指標。請注意,與使用「-kerning」設定(上例)不同,上例中每個字元的位置都經過不同程度的藝術調整,而不僅僅是一些簡單的固定量。例如,「t」和「h」之間只有一點重疊,但「n」和「y」字元之間的重疊要多得多。 抖動字元:如果您要繪製單獨的字元(無論是否重疊),則可以將它們放置在「抖動」或隨機模式中,特別是使用不同的上下偏移量。您甚至可以將其發揮到極致,以產生特殊效果,例如...

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -stroke black -strokewidth 4 -fill white \
          -stroke black -annotate  +26+80 A  -stroke none -annotate  +26+80 A \
          -stroke black -annotate  +95+63 n  -stroke none -annotate  +95+63 n \
          -stroke black -annotate +133+54 t  -stroke none -annotate +133+54 t \
          -stroke black -annotate +156+67 h  -stroke none -annotate +156+67 h \
          -stroke black -annotate +193+59 o  -stroke none -annotate +193+59 o \
          -stroke black -annotate +225+59 n  -stroke none -annotate +225+59 n \
          -stroke black -annotate +266+54 y  -stroke none -annotate +266+54 y \
          font_jittered.jpg
[IM Output]

模糊字型:使用「-blur」運算符直接散佈字型顏色。此運算符允許您拍攝圖像並將其向所有方向散佈。這使您可以產生看起來更柔和的陰影和/或噴漆效果。以下示例顯示了您可以使用此功能實現的效果。

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -fill navy  -annotate +25+65 'Anthony' \
          -blur 0x3   font_fuzzy.jpg
[IM Output]
請注意,模糊會在給定運算符的位置應用於整個圖像。如果要對現有圖像使用模糊,則必須單獨繪製字型(在透明背景上),然後將其疊加在背景圖像上。
-blur」(或「-gaussian」)運算符修改的區域比您想像的要大得多。如果您的背景畫布不夠大,您可能會從這些運算符中收到錯誤。如果發生這種情況,請向圖像添加額外的空間,例如使用「-border」,或為運算符的工作半徑(第一個參數)添加限制。

此外,圖像模糊通常會導致之後使用「-trim」毫無用處。每當您對圖像使用模糊處理時,可能需要手動修剪或其他調整。

模糊陰影:將模糊字型用作柔和陰影的偏移量。請注意,我們還使用了更大的散佈值。

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -annotate +30+70 'Anthony'   -blur 0x4 \
          -fill white  -stroke black  -annotate +25+65 'Anthony' \
          font_shadow_fuzzy.jpg
[IM Output]
柔和陰影:「-shadow」運算符不僅允許您為包含透明度的圖像產生和定位柔和的模糊陰影,還允許您使用任何顏色並設定一般透明度級別。

  magick -size 300x100 xc:none -font Candice -pointsize 72 \
          -fill white  -stroke black  -annotate +25+65 'Anthony' \
          \( +clone -background navy  -shadow 70x4+5+5 \) +swap \
          -background lightblue -flatten  -trim +repage  font_shadow_soft.jpg
[IM Output]
有關「-shadow」運算符的更多信息,請參見 產生陰影。從 IM v6.3.1 開始,「montage」命令還可以產生包含透明度的圖像的柔和「形狀」陰影。這意味著您可以非常輕鬆地對「標籤:」圖像進行陰影處理。

  montage -background none -fill white -font Candice \
          -pointsize 72 label:'Anthony' +set label \
          -shadow  -background lightblue -geometry +5+5 \
          font_montage_shadow.jpg
[IM Output]
但是,您無法控制蒙太奇陰影的偏移量、顏色或模糊量(目前)。 柔和輪廓:將模糊字型用作輪廓邊框。這就像使用原始字型作為噴槍的遮罩一樣。

  magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
          -annotate +25+65 'Anthony'    -blur 0x5 \
          -fill white  -annotate +25+65 'Anthony'   font_outline_soft.jpg
[IM Output]
請注意,邊緣非常淺,因為不僅黑色向外擴散,背景顏色也會向內擴散,導致邊緣只有 50% 的深色。一種解決方法是使用陰影輪廓,並使用色階調整來修正亮度,但這需要一些非常進階的影像處理技術。 較密集的柔和輪廓:另一種修正柔和輪廓亮度的方法是模糊具有較寬筆畫輪廓的字體。這有效地將 50% 的模糊點從字體邊緣移開。它還允許使用更大的模糊值,使黑色可以進一步擴散。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -stroke black -strokewidth 8 -annotate +25+65 'Anthony' -blur 0x8 \
           -fill white   -stroke none   -annotate +25+65 'Anthony' \
           font_denser_soft_outline.jpg
[IM Output]
如需此方法的實際範例,請參閱將影像標籤添加到縮圖中產生的範例,以及在影像上方標註中的最後一個範例。
距離模糊陰影:隨著可變模糊映射的引入,您現在可以模糊陰影,使其隨著陰影與投影物件的距離增加而變得更加模糊。例如,在這裡,我採用了傾斜陰影字體,並將陰影模糊化,使其在頂部清晰,在底部更加模糊。

   magick -size 320x40 xc:lightblue  -font Candice -pointsize 72 \
           -fill RoyalBlue -annotate 0x125+20+0 'Anthony' \
           \( -size 320x45 gradient:black -append \) \
           -compose Blur -set option:compose:args 20x5+45 -composite \
           \( -size 320x60 xc:lightblue \
              -fill Navy    -annotate 0x0+20+59   'Anthony' \) \
           +swap -append   font_var_blur.jpg
[IM Output]
請注意,我不僅僅使用圓形模糊,因為落在傾斜表面上的光會形成橢圓形,而不是圓形。因此,模糊也需要形成橢圓形。基本上,我使用了一種橢圓模糊變體來實現這種效果。最後一點,使用標註角度參數來建立傾斜文字(請參閱標註參數使用),可能不是產生像這樣的三維陰影的最佳方法。基本上,它不能像真實的陰影那樣使陰影變短或變長,因為它只進行旋轉剪切。更好的方法是使用三點仿射變換,它可以更好地控制陰影的位置(請參閱使用仿射剪切的三維陰影)。當然,您仍然需要使用可變模糊技術才能使其看起來更逼真。
髒污印刷字體像素會稍微散開,然後模糊化,並經過幾次閾值處理以平滑最終輪廓。結果是字體看起來像是印在粗糙的報紙上。

  magick -size 320x100 xc: \
          -font Candice -pointsize 72 -annotate +25+65 'Anthony' \
          -spread 1 -blur 0x1 -threshold 50% -blur 0x1 font_dirty_print.jpg
[IM Output]
此字體來自討論如何弄髒字體,其中包含其他更複雜的方法。
斜角字體陰影運算子可用於產生具有斜角和平滑彎曲邊緣的精美三維字體。

    magick -size 320x100 xc:black -font Candice -pointsize 72 \
              -fill white   -annotate +25+65 'Anthony' \
              -shade 140x45  font_beveled.jpg
[IM Output]
這比浮雕字體好多了,但陰影只會產生灰階影像。另一方面,有很多方法可以用您需要的任何顏色替換上述結果的灰階。使用陰影為字體「斜角」的最大問題是斜角的粗細不易調整。無論使用什麼字體大小,它基本上都固定在大約 5 個像素的粗細。
圓錐字體:通過使用新的形態學距離方法(從 IM v6.6.2 開始)結合陰影運算子,您可以使整個字體看起來像是一個三維山脊。這確實需要對抗鋸齒像素進行一些特殊處理,如具有抗鋸齒形狀的距離中所述,但結果是一個圓錐形的山峰狀字體。

  magick -size 320x100 xc:black -font Candice -pointsize 72 \
          -fill white   -annotate +25+65 'Anthony' \
          -gamma 2  +level 0,1000 -white-threshold 999 \
          -morphology Distance Euclidean:4,1000 -auto-level \
          -shade 135x30 -auto-level +level 10,90% font_conic.jpg
[IM Output]
通過添加一點“-adaptive-blur”,您可以平滑結果,為生成的字體產生更好且奇怪的光澤外觀。

  magick -size 320x100 xc:black -font Candice -pointsize 72 \
          -fill white   -annotate +25+65 'Anthony' \
          -gamma 2  +level 0,1000 -white-threshold 999 \
          -morphology Distance Euclidean:4,1000 -auto-level \
          -shade 135x30 -auto-level +level 10,90% \
          -adaptive-blur 0x2  font_conic_smoothed.jpg
[IM Output]
如果在使用陰影之前先使用「-adaptive-blur」,則會導致邊緣模糊,但字型的中心脊線(骨架)不會模糊。結果看起來像是尖銳的脊線被推入橡膠板中。

  magick -size 320x100 xc:black -font Candice -pointsize 72 \
          -fill white   -annotate +25+65 'Anthony' \
          -gamma 2  +level 0,1000 -white-threshold 999 \
          -morphology Distance Euclidean:4,1000 -auto-level \
          -adaptive-blur 0x2 \
          -shade 135x30 -auto-level +level 10,90%  font_conic_ridge.jpg
[IM Output]
使用不同的距離核心,例如切比雪夫,在處理看起來更規則的字型(例如 Arial 字型系列)時效果更好。

  magick -size 320x100 xc:black -font ArialBk -pointsize 70 \
          -fill white   -annotate +5+70 'Anthony' \
          -gamma 2  +level 0,1000 -white-threshold 999 \
          -morphology Distance Chebyshev:1,1000 -auto-level \
          -shade 135x30 -auto-level +level 10,90% font_chebyshev.jpg
[IM Output]
內斜角字型:透過裁剪距離函數來限制距離,將只會對形狀的邊緣進行斜角處理。

  magick -size 320x100 xc:black -font Candice -pointsize 72 \
          -fill white   -annotate +25+65 'Anthony' \
          -gamma 2 +level 0,1000 -white-threshold 999 \
          -morphology Distance Euclidean:4,1000  -level 0,5000 \
          -shade 135x30 -auto-level +level 10,90% font_inner_bevel.jpg
[IM Output]

拱形字型:「-wave」運算子(詳情請參閱正弦波置換)將垂直移動圖像的像素,以形成拱形。垂直線將保持垂直,並對字元進行剪切以產生曲線。

    magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
    -fill navy  -annotate +25+65 'Anthony' \
    -background lightblue -wave -50x640 -crop x110+0+10 \
    font_wavy.jpg
[IM Output]
請注意,要使用「-wave」建立拱形,您需要使用的「波長」是圖像寬度的兩倍(2 × 320 或 640 像素)。此外,由於「-wave」會根據拱形的程度為圖像添加額外空間,因此需要在之後修剪或裁剪該空間。這是一種簡單、快速但有效的文字拱形製作方法。 弧形字型通用扭曲運算子也提供其他文字/圖像扭曲方法。例如,「Arc」方法會將字型彎曲成真正的圓弧,而不是上一個範例中垂直移動的「拱形」。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill navy -annotate +25+65 'Anthony' \
           -distort Arc 120  -trim +repage \
           -bordercolor lightblue -border 10  font_arc.jpg
[IM Output]

圓形字型:您甚至可以將其發揮到極致,將文字包裹成一個完整的或幾乎完整的圓圈。

   magick -font Candice -pointsize 32 -background lightblue \
           -fill navy label:"Anthony's IM Examples" \
           -virtual-pixel background  -distort Arc 340 \
           font_circle.jpg
[IM Output]
如需更多選項和可能性,請參閱弧形扭曲 螺旋字型:在包裹字型之前,先添加一些旋轉以使其傾斜一定角度,即可將圓圈轉換為螺旋形。

   magick -font Candice -pointsize 32 -background lightblue \
           -fill navy  label:"Anthony's IM Examples" \
           -rotate 12 -virtual-pixel background -distort Arc 360 \
           -trim -bordercolor lightblue -border 5x5  font_spiral.jpg
[IM Output]
然而,文字的高度(徑向)保持不變,它不會隨著靠近中心而被拉伸或壓縮,從而對字元產生強烈的縱橫比失真。您可以透過在文字旋轉中使用透視扭曲來解決這個問題,以在應用弧形扭曲之前調整字型高度。這種技術的問題在於,您只能進行一次螺旋扭曲,儘管您可以使用多行文字並小心地對齊線條,以產生多個螺旋。*如果您嘗試這樣做,請提交一個範例給我?*
顫音字型:我們在上面的拱形字型中使用的「-wave」運算子也可以在更高的頻率和更小的振幅下使用,以製作顫動的字型。此外,透過添加一些旋轉操作,您甚至可以使振動以您喜歡的任何角度進行!

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill navy  -annotate +25+65 'Anthony' \
           -background lightblue -rotate 85  -wave 2x5   -rotate -85 \
           -gravity center  -crop 320x100+0+0 +repage font_vibrato.jpg
[IM Output]
如需有關使用此類扭曲的更多資訊,請參閱圖像扭曲上的範例頁面,尤其是波浪扭曲運算子 彗星字型:其中一個專用的模糊運算子「-motion-blur」允許您為圖像中的物件建立類似彗星的尾巴。

   magick -size 340x120 xc:lightblue  -font Candice  -pointsize 72 \
           -fill navy   -annotate +45+95 'Anthony' -motion-blur 0x25+65 \
           -fill black  -annotate +45+95 'Anthony' -motion-blur 0x1+65 \
           font_comet.jpg
[IM Output]
您可以使用不同的顏色來讓這個複合字體更加生動,營造出真正火熱的效果。您也可以使用特殊模糊來做更多事情,但是 IM 的這個方面仍然處於實驗階段,這些運算符的語法在不久的將來可能會有所變化。煙霧字體:將其與波浪效果結合使用,您可以讓彗星字體看起來像煙霧、氣味,甚至是從字體上升起的火焰!

   magick -size 320x120 xc:lightblue  -font Candice  -pointsize 72 \
           -fill black  -annotate +25+95 'Anthony'  -motion-blur 0x25+90 \
           -background lightblue -rotate 60  -wave 3x35  -rotate -60 \
           -gravity center  -crop 320x120+0+0 +repage +gravity \
           -fill navy   -annotate +25+95 'Anthony'   font_smoking.jpg
[IM Output]


您是否有一個有趣的變換要添加到上面的列表中?

將遮罩圖像與字體一起使用

在背景圖像上繪製「印章字體」實際上比我在上面詳述的大多數生成花式字體的方法要困難得多。原因是原始字體的一部分被擦除了,這在將其繪製在不是簡單純色的背景上時會出現問題。這是我們上面生成的複合字體圖像。

   magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill black      -annotate +24+64 'Anthony' \
           -fill white      -annotate +26+66 'Anthony' \
           -fill lightblue  -annotate +25+65 'Anthony' \
           font_stamp.jpg
[IM Output]
如果我們嘗試使用完全相同的方法在透明背景(PNG 格式圖像)上繪製字體,我們只會失敗...

   magick -size 320x100 xc:transparent -font Candice -pointsize 72 \
           -fill black        -annotate +24+64 'Anthony' \
           -fill white        -annotate +26+66 'Anthony' \
           -fill transparent  -annotate +25+65 'Anthony' \
           trans_stamp.png
[IM Output]
發生的事情是,我們試圖用「透明」顏色擦除字體的中心部分。但是正如您所看到的,用透明度繪製只會什麼也不繪製!所以上面的結果就好像最後的「擦除」-annotate」運算符根本不起作用一樣。這個問題大約有六種解決方案。我將在這裡介紹三種這樣的方法,而其他方法則在 IM 示例頁面的其他地方進行了討論。可能最簡單的方法不是完全修復上面的字體,而是在將其繪製到背景圖像上時使用「遮罩」,以告訴「magick composite」命令忽略中間部分。「magick composite」遮罩圖像是一個灰度圖像,純黑色表示將是透明的部分,純白色表示您希望完全可見(不透明)的任何部分。任何灰色陰影都將繪製為半透明,並與下面的背景顏色融合在一起。我們上面的圖像幾乎是正確的,所以讓我們遮罩掉所有我們不想要的部分。我們從黑色背景(完全透明)開始,然後用白色繪製我們想要的任何東西,用黑色繪製我們不想要的任何東西。

   magick -size 320x100 xc:black -font Candice -pointsize 72 \
           -fill white   -annotate +24+64 'Anthony' \
           -fill white   -annotate +26+66 'Anthony' \
           -fill black   -annotate +25+65 'Anthony' \
           mask_mask.jpg
[IM Output]
請注意,我們創建的遮罩不是僅僅是黑色和白色,而是由於抗鋸齒處理(有關詳細信息,請參見抗鋸齒示例),在區域邊緣具有各種灰色陰影。這些灰色像素使最終圖像邊緣更平滑,並且非常重要,因為這些像素代表半透明(僅一半可見)像素。現在我們有了一個遮罩,我們可以遮罩掉圖像中不需要的部分。我們可以在將圖像繪製(疊加)到等離子背景上的同時執行此操作。請注意所有三個圖像參數(字體、背景,然後是遮罩)的順序。


magick -size 320x180 plasma: -shave 0x40 plasma_background.jpg magick composite trans_stamp.png plasma_background.jpg mask_mask.jpg \ mask_result.jpg
[IM Output]
這種情況下,「magick -composite」的三參數形式是...

  magick plasma_background.jpg  trans_stamp.png  mask_mask.jpg \
          -composite  mask_result2.jpg
[IM Output]
結果很好,但我們現在需要兩張圖像來繪製複合字體。如果我們只需要一張圖像,並且遮罩直接內置到圖像本身中,那就更好了。基本上,我們希望用我們創建的字體圖像遮罩的副本完全替換字體圖像的 Alpha 通道。也就是說,我們將字體圖像(提供像素的顏色)直接與其遮罩(提供圖像的 Alpha 通道)合併。Alpha 合成設置「CopyOpacity」執行此替換。請注意命令中參數的順序。在這種情況下,字體本身是背景圖像,而遮罩是被疊加到背景圖像中的圖像。

  magick composite -compose CopyOpacity   mask_mask.jpg   trans_stamp.png \
            trans_stamp3.png
  magick composite trans_stamp3.png   plasma_background.jpg  mask_result3.jpg
[IM Output] [IM Output]
所有這些操作的結果就是字體的中心部分通過完全透明化最終被正確地擦除。由此產生的單個圖像可以很容易地覆蓋在任何背景上,而不需要任何額外的遮罩圖像。
縮小像上面那樣較大的透明字體印章會產生非常好的浮水印。縮小會使輪廓變得不那麼不透明,也不那麼明顯,就像浮水印應該的那樣。這兩種顏色還確保了標記在非常亮和非常暗的圖像上都能可靠地顯示。
有關使用圖像遮罩的更多信息,請參閱編輯圖像遮罩

進階字體處理

通過將上述技術與適當的顏色和其他可用的花式字體組合在一起,您可以製作出一些奇妙的效果,這些效果通常看起來與上面顯示的原始技術完全不同。

更複雜的字體 - 示例

例如,我們在這裡生成一段非常複雜和多彩的文本。

  magick -font Times-Bold -pointsize 64 \
                     -background none  label:"Colorful Arc" \
          \( +clone -sparse-color Barycentric '0,%h blue %w,0 red' \
             \) -compose In -composite \
          -virtual-pixel transparent -distort arc 120 \
          \( +clone -background black -shadow 100x2+4+4 \
             \) +swap -background white -compose over -layers merge +repage \
          colorful_arc.jpg
[IM Output]
上面複雜的命令佈局是為了在不同的行上執行每個主要的圖像處理步驟。首先創建文本圖像。然後生成兩點漸變作為顏色疊加。也可以使用其他著色方法,例如模糊隨機圖像分形等離子體平鋪畫布。然後使用In Alpha 合成運算符使用顏色疊加對文本進行著色。然後使用弧形扭曲扭曲彩色文本,最後生成陰影並使用圖層合併置於文本下方。最後一種方法在保存為 JPEG 之前還去除了透明度,並將其替換為白色。有關此類複雜圖像處理的更多信息,請參閱複雜圖像處理和調試

霓虹燈

這是另一個簡單的例子。通過在深色背景上使用柔和輪廓字體,但使用所有相同的顏色和適當的字體,您可以生成簡單的“霓虹燈”效果...

  magick -fill dodgerblue -background black -font Anaconda -pointsize 72 \
          label:' I M  Examples ' -bordercolor black -border 30x30 \
          \( +clone -blur 0x25 -level 0%,50% \) \
          -compose screen -composite    neon_sign.gif
[IM Output]
只需多花一點功夫,您也可以為其製作動畫!但我會把這個留給讀者作為練習。有關特殊效果的示例,例如“凝膠”效果“Aqua”效果,請參閱高級 IM 示例。有關您可能想嘗試實現的其他字體效果的一些示例,請參閱XaraXone,使用輪廓工具。IM 可以輕鬆創建如圖所示的輪廓效果。

金屬效果

此效果本質上是一種圓角和顏色查找表替換效果。請參閱討論金屬效果snibgo 的工作示例

# Generate a blured input font shaped mask
# first blur-level is a rounding or 'puddling' effect
# the second blur is the important one for the metallic effect.
magick -background none -pointsize 160 -font Candice label:" Anthony " \
        -blur 0x5 -channel A -level 40%,60% +channel \
        -blur 0x3    metallic_input.png

# Metallic Color Lookup Table
magick \
  -size 1x1000 gradient:  -gamma 0.9 \
  -function Sinusoid 2.25,0,0.5,0.5 \
  \( gradient:'rgb(100%,100%,80%)-black' -gamma 1 \) \
  +swap \
  -compose Overlay -composite \
  -rotate 90 \
  metallic_clut.png

# Give blurred font a metallic look
#  * first create a vertial gradient
#  * then merge this with a 'shade' reflective gradient
#  * before applying the color to the resulting gradient
#  * finally add a shadow.
magick metallic_input.png -set colorspace RGB \
  \( -clone 0 -alpha off \
     -sparse-color Barycentric "0,0 White  0,%[fx:h-1] Black" \
     -alpha on \
  \) \
  \( -clone 0 -alpha extract -shade 135x45 -auto-gamma -auto-level \
     -alpha on -channel A -level 0%x10% +channel \
  \) \
  -delete 0 -compose Overlay -composite \
  metallic_clut.png -clut  -set colorspace sRGB \
  \
  \( +clone -background navy -shadow 80x2+5+5 \
  \) +swap -background None -compose Over -layers merge \
  \
  -trim +repage metallic.png

[IM Output]