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]
強い影:フォントをオフセットして2回描画することで、単純な「強い」影効果を作成できます。

   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" を使用した場合の効果とは異なります。画像のせん断軸を長くするため、画像の高さ(または幅)は操作によって変化しません。
スタンプ状フォント:フォントを濃淡と元の色の3回描画することで、スタンプのような凹みを付けることができます。

   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]
最後のフォントの「描画」によってフォントの中央部分が消去されることに注意してください。これは、単色の背景でのみ実行できます。マスク画像の使用を参照して、単色ではないランダムな背景でどのように使用できるかを確認してください。2つの色を入れ替えると、当然のことながら、凹んだフォントではなく、盛り上がったフォントになります。 押し出しまたは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" 設定を設定することでフォントの輪郭を描画できるため、はるかに優れたソリューションが存在します。(以下のストロークフォントを参照)。それにもかかわらず、輪郭を生成するためのこのような複数の再描画は、インターネット中に存在するような事前に準備されたクリップアート画像で非常に役立ちます。「GD」からの「PHP」など) "-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" 引数の内部で変更できることに注意してください。 多色輪郭:この手法が有用であるもう一つの理由は、フォントを描画する際に1つの輪郭色に限定されないことです。フォントを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]
ストロークの色がフォントの外側だけでなく内側も侵食することに注意してください。詳細については、ストロークとストローク幅オプションの結果を参照してください。
太いストローク:もう一度フォントを2回再描画しますが、ストロークをオフにすると、線の内部部分が削除され、より美しく太い輪郭のフォントが作成されます。

   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 の追加)を使用し、フォントを2回描画する(前の例のように)と、「太い」フォントのすべての文字を連結して、興味深い変化を生み出すことができます。

  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%しか暗くなりません。これを修正する1つの方法は、シャドウアウトラインレベル調整を使用してその明るさを修正することですが、これは非常に高度な画像処理技術を使用します。 より濃いソフトアウトライン:ソフトアウトラインの明るさを修正するもう1つの方法は、幅の広いストロークアウトラインを持つフォントをぼかすことです。これにより、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シャドウを生成する最良の方法ではありません。基本的に、回転せん断しか行わないため、実際の影のように影を短くしたり長くしたりすることはできません。より良い方法は、影の配置をより適切に制御できる3点アフィン歪みを使用することです(アフィンせん断を使用した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]
このフォントは、より複雑な方法も含まれるディスカッションHow to dirty a fontからのものです。
面取りフォントシェード演算子を使用して、面取りされ、滑らかに湾曲したエッジを持つ非常に美しく見える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以降の新しい形態距離法シェード演算子を組み合わせることで、フォント全体を3次元の山脈のように見せることができます。これは、アンチエイリアスされたシェイプを使用した距離に従ってアンチエイリアシングピクセルを特別な方法で処理する必要がありますが、その結果、円錐形の山のようなフォントになります。

  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倍(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]
ただし、テキストの高さ(半径方向)は一定のままで、中心に近づくにつれて伸びたり圧縮されたりせず、文字に強いアスペクト比の歪みが生じます。テキスト回転の一部としてパースペクティブ歪みを使用してフォントの高さを調整してから、円弧歪みを適用することで、それを解決できます。このテクニックの問題点は、らせんを1回しかねじることができることですが、複数の行と行を合わせることに注意を払えば、複数のらせんを生成できます。 _この方法を試した場合は、例を提出してください?_
ビブラートフォント: 上記のアーチ状フォントで使用した "-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]
このような歪みの使用方法の詳細については、画像のワーピング、特にウェーブ歪みオペレータに関するサンプルページを参照してください。 コメットフォント: 特殊なぼかしオペレータの1つである "-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のこの側面はまだ実験段階であり、これらのオペレータの構文は近い将来変更される可能性があります。 スモーキングフォント: これとwaveを組み合わせることで、コメットフォントを煙、におい、または炎がフォントから立ち上がっているように見せることができます!

   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オペレータがまったく機能しない場合と同じでした。この問題には約半ダースの解決策があります。ここでは3つの方法を紹介しますが、他の方法は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]
作成したマスクは、単なる白黒ではなく、アンチエイリアシングにより領域のエッジにさまざまなグレースケールがあります(詳細はアンチエイリアシングの例を参照)。これらのグレースケールピクセルにより、最終的な画像のエッジが滑らかになり、非常に重要です。これらのピクセルは半透明(半分しか表示されない)ピクセルを表すためです。マスクができたので、画像の不要なセクションをマスクできます。これは、画像をプラズマ背景に描画(オーバーレイ)しているときに実行できます。3つの画像引数(フォント、背景、マスク)の順序に注意してください。


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]
この3引数の「magick -composite」形式は…です。

  magick plasma_background.jpg  trans_stamp.png  mask_mask.jpg \
          -composite  mask_result2.jpg
[IM Output]
良好な結果ですが、複合フォントを描画するには2つの画像が必要になりました。マスクが画像自体に直接組み込まれた1つの画像のみが必要な方が良いでしょう。基本的に、フォント画像のアルファチャネルを、作成したフォント画像マスクのコピーで完全に置き換えたいと考えています。つまり、フォント画像(ピクセルの色を提供)とそのマスク(画像のアルファチャネルを提供)を直接マージします。アルファ合成設定「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]
これにより、フォントの中央部分が完全に透明になることで、最終的に適切に消去されました。したがって、結果として得られる単一の画像は、追加のマスク画像を必要とせずに、あらゆる背景に簡単にオーバーレイできます。
上記のような大きな透明なフォントスタンプを縮小すると、非常に優れた透かしが作成されます。縮小すると、輪郭は不透明度が低くなり、目立たなくなります。透かしであるべきようにです。2つの色も、マークが非常に明るい画像と非常に暗い画像の両方で確実に表示されるようにします。
画像マスクの使用方法の詳細については、画像マスクの編集を参照してください。

高度なフォント処理

上記のテクニックを組み合わせ、適切な色と利用可能な他のファッシーフォントを使用することで、素晴らしい効果を生み出すことができます。これらは、上記で示した元のテクニックとはまったく異なるように見えることがよくあります。

より複雑なフォント - 例

たとえば、ここでは非常に複雑でカラフルなテキストを生成します。

  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]
上記の複雑なコマンドは、主要な画像処理ステップごとに別々の行で実行されるようにレイアウトされています。まず、テキスト画像が作成されます。次に、2点グラデーションがカラーオーバーレイとして生成されます。ぼかしランダム画像フラクタルプラズマ、またはタイルキャンバスなどの他のカラーリング方法も使用できます。次に、Inアルファ合成オペレータを使用して、カラーオーバーレイを使用してテキストに色を付けます。次に、着色されたテキストはアーク歪みを使用して歪められ、最後にが生成され、テキストの下にレイヤーマージされます。最後の方法では透明度が削除され、白で置き換えられてから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]