ImageMagick 使用例 -- 複合フォント効果
- ImageMagick 使用例 前書きと索引
-
複合フォント さまざまなスタイルで文字を画像として描画する
タイル塗り, グラデーション塗り, 上下反転, ハードシャドウ, 傾けた影, 斜体, スタンプ, 押し出し, アウトライン, 多色アウトライン, ストローク, 太いストローク, 細いストローク, 二重アウトライン, サイケデリック, 風船, 連結, 重ね合わせ, ジッター, ぼかし, ぼかし影, ソフトシャドウ, ソフトアウトライン, 濃いソフトアウトライン, 距離でぼかす影, かすれ印刷, ベベル, 円錐, 内側ベベル, アーチ, 円弧, 円, ビブラート, 彗星, 煙。 フォントへのマスク画像の使用 オーバーレイ前に画像の一部を取り除く 高度なフォント処理 フォントを発展させてより複雑な結果を生み出す
より複雑なフォント, ネオンサイン, メタリック 文字の描画は ImageMagick でできることの始まりにすぎません。ここでは IM の基本的な文字描画機能を修正して、凝ったフォントや特殊効果を作る方法を見ていきます。それらは Web ページや文書で使うことができます。
複合フォント効果
画像としての単なる文字は退屈ですが、ほんの少しの手間で文字を重ね合わせて色付けすれば、とても奇妙で素晴らしい効果を生み出せます。これを行うには、文字を複数回描画し、異なるタイルや色を重ね、利用可能な数多くの画像演算子を適用して、元の退屈な文字からより興味深い特殊効果を生成する必要があります。これらの効果の多くは、ここで使っているような基本的なフォント以外の画像にも適用できることに注意してください。特にクリップアート画像に効果を使うことができます。 タイルフォント : フォントを固定色で描く必要はありません。フォントの上にタイルパターンを使えます。
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile pattern:checkerboard -annotate +28+68 'Anthony' \
font_tile.jpg
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile gradient: -annotate +28+68 'Anthony' \
font_gradient.jpg
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -annotate 180x180+300+35 'Anthony' \
font_upsidedown.jpg
ハードシャドウ : フォントをオフセットを付けて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
傾けた影 : 「[-annotate](https://imagemagick.org/command-line-options/#annotate)」フォント描画演算子は、垂直方向と水平方向を別々に回転できるため、フォントに変わった回転「傾斜(slewing)」や「せん断(shearing)」を指定できます。これは奇妙な影を作ったり、独自のイタリックや斜体フォントを作るのに最適です。
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
文字回転の効果をまとめた表は、Annotate テキストオプションを参照してください。もちろん Candice フォントはこの効果を示すのに良いフォントではなく、結果をより3Dらしく見せるには別の細工が必要かもしれません。例えば距離で影をぼかすなどです。 斜体フォント : 「[-draw](https://imagemagick.org/command-line-options/#draw)」を使ってフォントを斜めにすることもできますが、描画面を歪ませるために追加の MVG (Magick Vector Graphics) 操作が必要になるため、少し難しくなります。描画面を歪ませるので、歪ませる前に '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
| 文字回転の効果をまとめた表は、Annotate テキストオプションを参照してください。もちろん Candice フォントはこの効果を示すのに良いフォントではなく、結果をより3Dらしく見せるには別の細工が必要かもしれません。何か面白いものを思いついたら、私に教えてください。世界中の他の人々と共有できるように。 | 「[-annotate](https://imagemagick.org/command-line-options/#annotate)」と「[-draw](https://imagemagick.org/command-line-options/#draw) skew?」操作は、実際には描画面の X 軸と Y 軸を回転させます。これは既存の画像に「[-shear](https://imagemagick.org/command-line-options/#shear)」を使う効果とは異なります。「[-shear](https://imagemagick.org/command-line-options/#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
フォントの最後の 'draw' が、フォントの中央部分を消していることに注目してください。これは単色の背景でのみ可能です。単色でないランダムな背景でこれをどう使うかはマスク画像の使用を参照してください。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
これは単なる影ではなく、描画されたフォントの適切な厚みづけであることに注意してください。これは非常に反復的で、あらゆる「形状を持つ」画像に使えます。この別の例についてはサムネイルに厚みを加えるを参照してください。
アウトラインフォント : 小さな位置オフセットを付けて複数回描画することで、アウトラインフォントを作れます。
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
これも非常に反復的なので、良いアウトライン手法ではありません。ImageMagick では「[-stroke](https://imagemagick.org/command-line-options/#stroke)」設定を使ってフォントのアウトラインを描けるため、はるかに良い手法が存在します(後述のストロークフォントを参照)。とはいえ、このような複数回の再描画によるアウトライン生成は、インターネット上のいたるところで見つかる既製のクリップアート画像に対しては非常に便利です。また「[-stroke](https://imagemagick.org/command-line-options/#stroke)」設定が使えない他のグラフィックライブラリやプログラム(「PHP」の「GD」など)でも便利な手法です。このアウトライン手法を示すもう一つの理由は、非常に尖った点を持つフォントのアウトラインを描く場合に、結果がより良くなることがあるからです。例えばここでは、フォントの尖った点を際立たせるためにフォントを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
描画の -fill」色は、「[-draw](https://imagemagick.org/command-line-options/#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
このような盛り上がったフォントを作るにはもっと良い方法がありますが、これは機能し、シンプルで、色の全範囲ではなく数色だけを使います。 アウトライン(ストローク)フォント : 「[-stroke](https://imagemagick.org/command-line-options/#stroke)」設定を使うと、フォントのアウトラインを直接描けます。通常、ストローク色は "none" に設定されているため使われません。ストロークの太さは「[-strokewidth](https://imagemagick.org/command-line-options/#strokewidth)」で変えられ、デフォルトは適切な値の 1 です。
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill white -stroke black -annotate +25+65 'Anthony' \
font_stroke.jpg
そしてこちらは、より重いストローク幅 3 の例です。
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill white -stroke black -strokewidth 3 \
-annotate +25+65 'Anthony' font_stroke_3.jpg
ストローク色がフォントの外側だけでなく内側も食い込んでいることに注目してください。詳しくは私のストロークとストローク幅オプションの結果を参照してください。
太いストローク : フォントをもう一度、今度はストロークをオフにして再描画することで、線の内部が取り除かれ、より見栄えのよい太いアウトラインのフォントが作れます。
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
-stroke」設定の使用は、ストロークとストローク幅オプションでさらに進めて取り上げており、そこでは描画演算子のこの側面をより深く掘り下げています。 細いストローク : 塗り色をオフにすることで、フォントのアウトラインだけを残せます。
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill none -stroke black -annotate +25+65 'Anthony' \
font_stroke_thin.jpg
二重アウトライン : 複数のストローク幅を使って再描画することで、二重のアウトラインを生成できます! 最初の描画はフォントの内側を塗るのにどんな塗り色を使ってもよく、ここで行ったように背景をそのまま残すために none のままにもできます。ただし最後のフォント描画は、必ず塗り設定 "none" で行わなければなりません。さもないと機能しません。
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
前述の「スタンプフォント」とは異なり、上記ではフォントの中央部分を消す必要がありませんでした。そのため、これは複雑なことなくどんな背景でも機能します。 サイケデリックフォント : 同様にして、色を入れ替えながらストローク幅を徐々に小さくしていくことで、サイケデリックなアウトライン効果を簡単に生成できます。
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
ぶつかり合う色を使ったり、異なるストローク幅を使ったり、あるいはフォントの位置を少しずらしたりすることで、さらにサイケデリックにできます。実験して、何ができるか試してみてください。 風船効果 : ここでは上記の「太いストロークフォント」とまったく同じことをしましたが、まったくの偶然で、フォントを再描画する際に白いストローク色を使いました。その結果、太いアウトラインを持つフォントの興味深い拡大が起きました。この「ふくらんだ」見た目のフォントは、まるで風船のように膨らませたかのようです。これはまさに、何が見つかるか実験する価値があることを示しています。
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 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
重ね合わせ文字 : これのバリエーションとして、各文字を別々に描画し、各文字が前の文字の上に重なるようにすることもできます。
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
ただしこれには、各文字の適切な位置を(手動またはスクリプトで自動的に)求める必要があります。各文字の本来の幅は、「[-strokewidth](https://imagemagick.org/command-line-options/#strokewitdh)」設定なしで各文字のラベルを生成することで求められます。例についてはフォントメトリクスの決定を参照してください。「[-kerning](https://imagemagick.org/command-line-options/#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
ぼかしフォント : 「[-blur](https://imagemagick.org/command-line-options/#blur)」演算子を使った、フォント色のまっすぐな広がり。この演算子では、画像を取り込んであらゆる方向に広げられます。これにより、よりやわらかい影や、スプレーペイントのような効果を生成できます。以下の例は、これで実現できる効果を示しています。
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-blur 0x3 font_fuzzy.jpg
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
ソフトシャドウ : 「[-shadow](https://imagemagick.org/command-line-options/#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
「[-shadow](https://imagemagick.org/command-line-options/#shadow)」演算子の詳細については、影の生成を参照してください。IM v6.3.1 以降、「[montage](montage.html)」コマンドも、透明部分を含む画像のやわらかい「形状に沿った」影を生成できます。これにより「[label:](text.html#label)」画像にも非常に簡単に影をつけられます。
montage -background none -fill white -font Candice \
-pointsize 72 label:'Anthony' +set label \
-shadow -background lightblue -geometry +5+5 \
font_montage_shadow.jpg
ただし montage の影については、オフセット・色・ぼかし量を一切制御できません(今のところ)。 ソフトアウトライン : ぼかしフォントをアウトラインの縁として使います。これは元のフォントをスプレーガンのマスクとして使うようなものです。
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
縁が非常に薄いことに注意してください。黒色が外へ広がるだけでなく、背景色も内側へ広がるため、縁は 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
この方法の実用例については、サムネイルへの画像ラベル追加で生成した例と、画像の上への注釈の最後の例を参照してください。
距離でぼかす影 : 可変ぼかしマッピングの導入により、影を投影元の物体からの見かけの距離に応じてよりぼやけるようにぼかせるようになりました。例えばここでは傾けた影フォントを取り、影が上部ではぼけず、下部ほどぼやけるようにぼかしました。
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
単に円形のぼかしを使わなかったことに注意してください。傾いた面に当たる光は円ではなく楕円を形作るからです。そのためぼかしも楕円を形作る必要があります。基本的に、この効果を実現するために楕円ぼかしの変種を使いました。最後に一点、傾けたテキストを作るのに annotate の角度引数を使うこと(Annotate 引数の使用を参照)は、このような初期の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
このフォントは、より複雑な方法も含む議論フォントを汚す方法から得たものです。
ベベルフォント : Shade 演算子を使うと、ベベルがついてなめらかに湾曲した縁を持つ、とても見栄えのよい3Dフォントを生成できます。
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-shade 140x45 font_beveled.jpg
これはスタンプフォントよりずっと見栄えがよいですが、shade はグレースケール画像しか生成しません。一方で、上記の結果のグレースケールを必要な色に置き換えられる方法はたくさんあります。shade を使ってフォントを「ベベル」加工する最大の問題は、ベベルの厚みが簡単には調整できないことです。基本的に、使用するフォントサイズに関係なく、おおよそ5ピクセルの厚みに固定されています。
円錐フォント : 新しいモルフォロジー距離法(IM v6.6.2 以降)をShade 演算子と組み合わせることで、フォント全体を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
少しの「[-adaptive-blur](https://imagemagick.org/command-line-options/#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
「[-adaptive-blur](https://imagemagick.org/command-line-options/#adaptive-blur)」をShadeの使用前に移動すると、縁はぼかされますが、フォント形状の中央の尾根(スケルトン)はぼかされません。結果は、鋭い尾根がゴムシートを押し上げているように見えます。
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
Chebyshevのような別の距離カーネルを使うと、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
内側ベベルフォント : 距離関数をクリッピングして距離を制限すると、形状の縁だけがベベル加工されます。
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
アーチフォント : 「[-wave](https://imagemagick.org/command-line-options/#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
「[-wave](https://imagemagick.org/command-line-options/#wave)」を使ってアーチを作るには、画像の幅の2倍の「波長」を使う必要があることに注意してください(2 × 320、つまり 640 ピクセル)。また「[-wave](https://imagemagick.org/command-line-options/#wave)」はアーチにした量だけ画像に余白を追加するため、その後その余白をトリミングまたはクロップする必要があります。テキストのアーチを作る、シンプルで速く効果的な方法です。 円弧フォント : 汎用歪み演算子は、他のテキスト/画像のワーピング手法も提供します。例えば '[Arc](distorts.html#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
円フォント : 極端にして、テキストを完全な、あるいはほぼ完全な円に巻きつけることさえできます。
magick -font Candice -pointsize 32 -background lightblue \
-fill navy label:"Anthony's IM Examples" \
-virtual-pixel background -distort Arc 340 \
font_circle.jpg
より多くのオプションと可能性については円弧歪みを参照してください。 螺旋フォント : 巻きつける前に少し回転を加えてフォントを斜めにすると、円を螺旋に変換できます。
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
ただしテキストの(半径方向の)高さは一定のまま残り、中心に近づくにつれて引き伸ばされたり圧縮されたりしないため、文字に強いアスペクト歪みが生じます。これは、テキスト回転の一部として透視歪みを使い、Arc 歪みを適用する前にフォントの高さを調整することで解決できます。この手法の問題は、螺旋の巻きを1回しかできないことですが、複数行を使い、行を揃えるよう注意すれば、複数の螺旋を生成できます。もしこれを試したら、例を私に送ってもらえますか?
ビブラートフォント : 上記のアーチフォントで使った「[-wave](https://imagemagick.org/command-line-options/#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
このような歪みの使い方の詳細については、画像のワーピングの例ページ、特にWave 歪み演算子を参照してください。 彗星フォント : 特殊なぼかし演算子の一つである「[-motion-blur](https://imagemagick.org/command-line-options/#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 のこの側面全体はまだ実験的で、これらの演算子の構文は近い将来変わる可能性があります。 煙フォント : これを 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
上記のリストに追加したい面白い変換はありますか?
フォントへのマスク画像の使用
背景画像の上に「スタンプフォント」を描くことは、実は上で詳述したほとんどの凝ったフォント生成方法よりずっと難しいのです。理由は、元のフォントの一部が消されるためで、単純な単色でない背景に描く際に問題が生じます。これは上で生成した複合フォント画像です。
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
まったく同じ方法を使って、透明な背景(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
何が起きたかというと、フォントの中央部分を「透明」色で消そうとしました。しかしご覧のとおり、透明で描画しても何も描かれません! ですから上記の結果は、最後の「消去」-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
作成したマスクは単なる白黒では なく、アンチエイリアスのために領域の縁に沿ってさまざまなグレーの濃淡を持つことに注意してください(詳細はアンチエイリアスの例を参照)。これらのグレーのピクセルが最終画像の縁をなめらかにし、半透明(半分だけ見える)のピクセルを表すため、とても重要です。マスクができたので、画像の不要な部分をマスクで取り除けます。これは画像をプラズマ背景の上に描画(オーバーレイ)しながら行えます。3つの画像引数の順序(フォント、背景、そしてマスク)に注意してください。
magick -size 320x180 plasma: -shave 0x40 plasma_background.jpg
magick composite trans_stamp.png plasma_background.jpg mask_mask.jpg \
mask_result.jpg
これの3引数「magick -composite」形式は…
magick plasma_background.jpg trans_stamp.png mask_mask.jpg \
-composite mask_result2.jpg
良い結果ですが、複合フォントを描くのに2つの画像が必要になりました。マスクが画像自体に直接組み込まれた1つの画像だけで済めば、もっと良いでしょう。基本的に、フォント画像のアルファチャンネルを、作成したフォント画像マスクのコピーで完全に置き換えたいのです。つまり、フォント画像(ピクセルの色を供給)を、そのマスク(画像のアルファチャンネルを供給)と直接マージします。アルファ合成設定「[CopyOpacity](compose.html#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
| このすべての結果として、フォントの中央部分が完全に透明にされることで、ついに適切に消されました。そのため、できあがった単一の画像は、追加のマスク画像を必要とせず、どんな背景にも簡単に重ねられます。 | 上記のような大きめの透明フォントスタンプを縮小すると、とても良い透かしになります。縮小するとアウトラインがより不透明でなくなり目立たなくなります。まさに透かしがそうあるべきように。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
上記の複雑なコマンドは、主要な各画像処理ステップを別々の行で実行するように配置されています。まずテキスト画像が作成されます。次に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 例を参照してください。試して実装してみたい他のフォント効果の例については、XaraXone, Using Contour Toolを参照してください。IM はそこで示されているような輪郭効果を簡単に作れます。
メタリック効果
この効果は本質的に、丸めとカラールックアップテーブル置換の効果です。議論メタリック効果を参照してください。snibgoによる動作例
# ぼかした入力フォント形状のマスクを生成
# 最初の blur-level は丸めまたは「水たまり」効果
# 2番目の blur がメタリック効果にとって重要なもの
magick -background none -pointsize 160 -font Candice label:" Anthony " \
-blur 0x5 -channel A -level 40%,60% +channel \
-blur 0x3 metallic_input.png
# メタリックカラールックアップテーブル
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
# ぼかしたフォントにメタリックな見た目を与える
# * まず垂直グラデーションを作成
# * 次にこれを 'shade' 反射グラデーションとマージ
# * その後できあがったグラデーションに色を適用
# * 最後に影を追加
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]](../static/img/fonts/font_tile.jpg)
![[IM Output]](../static/img/fonts/font_gradient.jpg)
![[IM Output]](../static/img/fonts/font_upsidedown.jpg)
![[IM Output]](../static/img/fonts/font_shadow.jpg)
![[IM Output]](../static/img/fonts/font_slewed.jpg)
![[IM Output]](../static/img/fonts/font_slanted.jpg)
![[IM Output]](../static/img/fonts/font_stamp.jpg)
![[IM Output]](../static/img/fonts/font_extrude.jpg)
![[IM Output]](../static/img/fonts/font_outlined.jpg)
![[IM Output]](../static/img/fonts/font_outlined_12.jpg)
![[IM Output]](../static/img/fonts/font_colourful.jpg)
![[IM Output]](../static/img/fonts/font_stroke.jpg)
![[IM Output]](../static/img/fonts/font_stroke_3.jpg)
![[IM Output]](../static/img/fonts/font_stroke_thick.jpg)
![[IM Output]](../static/img/fonts/font_stroke_thin.jpg)
![[IM Output]](../static/img/fonts/font_stroke_double.jpg)
![[IM Output]](../static/img/fonts/font_psychedelic.jpg)
![[IM Output]](../static/img/fonts/font_balloon.jpg)
![[IM Output]](../static/img/fonts/font_joined.jpg)
![[IM Output]](../static/img/fonts/font_overlapped.jpg)
![[IM Output]](../static/img/fonts/font_jittered.jpg)
![[IM Output]](../static/img/fonts/font_fuzzy.jpg)
![[IM Output]](../static/img/fonts/font_shadow_fuzzy.jpg)
![[IM Output]](../static/img/fonts/font_shadow_soft.jpg)
![[IM Output]](../static/img/fonts/font_montage_shadow.jpg)
![[IM Output]](../static/img/fonts/font_outline_soft.jpg)
![[IM Output]](../static/img/fonts/font_denser_soft_outline.jpg)
![[IM Output]](../static/img/fonts/font_var_blur.jpg)
![[IM Output]](../static/img/fonts/font_dirty_print.jpg)
![[IM Output]](../static/img/fonts/font_beveled.jpg)
![[IM Output]](../static/img/fonts/font_conic.jpg)
![[IM Output]](../static/img/fonts/font_conic_smoothed.jpg)
![[IM Output]](../static/img/fonts/font_conic_ridge.jpg)
![[IM Output]](../static/img/fonts/font_chebyshev.jpg)
![[IM Output]](../static/img/fonts/font_inner_bevel.jpg)
![[IM Output]](../static/img/fonts/font_wavy.jpg)
![[IM Output]](../static/img/fonts/font_arc.jpg)
![[IM Output]](../static/img/fonts/font_circle.jpg)
![[IM Output]](../static/img/fonts/font_spiral.jpg)
![[IM Output]](../static/img/fonts/font_vibrato.jpg)
![[IM Output]](../static/img/fonts/font_comet.jpg)
![[IM Output]](../static/img/fonts/font_smoking.jpg)
![[IM Output]](../static/img/fonts/trans_stamp.png)
![[IM Output]](../static/img/fonts/mask_mask.jpg)
![[IM Output]](../static/img/fonts/mask_result.jpg)
![[IM Output]](../static/img/fonts/mask_result2.jpg)
![[IM Output]](../static/img/fonts/trans_stamp3.png)
![[IM Output]](../static/img/fonts/mask_result3.jpg)
![[IM Output]](../static/img/fonts/colorful_arc.jpg)
![[IM Output]](../static/img/fonts/neon_sign.gif)
![[IM Output]](../static/img/fonts/metallic.png)