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”设置会覆盖“-fill”颜色用于“-draw”操作符。
从 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 字体不是显示此效果的好字体,可能需要添加其他细节才能使结果看起来更像 3D。例如 使用距离模糊阴影 倾斜字体:您还可以使用“-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 字体不是显示此效果的好字体,可能需要添加其他细节才能使结果看起来更像 3D。如果您想出任何有趣的东西,请告诉我,以便与世界其他地方分享。
-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]
请注意,字体的最后一次“draw”擦除了字体中间的部分。这只能在纯色背景上完成,请参阅 使用蒙版图像 以了解如何在非纯色的随机背景上使用此方法。如果交换两种颜色,您当然会得到凸起的字体,而不是凹陷的字体。 挤出或 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]
您还会注意到,可以在“-draw”参数中更改绘图 -fill”颜色。 多色轮廓:此技术有用的另一个原因是,您不限于在绘制字体时只使用一种轮廓颜色。通过以非常精心设计的顺序用 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]
但是,这需要您计算出(手动或使用脚本自动计算)每个字符的适当位置。每个字符的自然宽度可以通过生成每个字符的标签来确定,而没有任何“-strokewidth”设置。请参阅确定字体度量以获取示例。请注意,与使用“-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”命令还可以生成包含透明度的图像的柔和“形状”阴影。这意味着您可以非常轻松地为“label:”图像添加阴影。

  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]
请注意,我不仅使用了圆形模糊,因为落在倾斜表面上的光会形成椭圆形,而不是圆形。因此,模糊也需要形成椭圆形。基本上,我使用了椭圆形模糊变体来实现此效果。最后一点,使用注释角度参数创建倾斜文本(请参阅注释参数用法)可能不是生成类似于此的初始 3D 阴影的最佳方法。基本上,它不能像真正的阴影那样使阴影变短或变长,因为它只执行旋转剪切。更好的方法是使用三点仿射变形,它可以让您更好地控制阴影的位置(请参阅使用仿射剪切的 3D 阴影)。当然,您仍然需要可变模糊技术才能使其看起来正确。
脏印刷字体像素略微扩展,然后模糊,并进行了几次阈值处理以平滑最终轮廓。结果是看起来像在粗糙报纸上打印的字体。

  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]
此字体来自讨论如何使字体变脏,其中包括其他更复杂的方法。
斜角字体阴影运算符可用于生成外观非常漂亮的 3D 字体,其边缘呈斜角且平滑弯曲。

    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 通道)合并。“CopyOpacity”alpha 合成设置执行此替换。请注意命令中参数的顺序。在这种情况下,字体本身是背景图像,而蒙版是叠加到背景图像中的图像。

  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]
只需稍微多做一点工作,你也可以对其进行动画处理!但我将其留作读者的练习。有关特殊效果(如“凝胶”效果“水”效果),请参阅高级 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]