💬
Manimで枠付き文字を描画する
はじめに
ManimというPythonで動作する動画ライブラリがあります。本記事ではManimで枠付き文字を描画する方法を書きます。(この方法を見つけるまで2日溶かした)
バージョンはManim Community v0.15.1です。
ソースコード
from manim import *
class FillText(Scene):
def construct(self):
filltext = Text("枠付き文字テスト", stroke_width=2, font_size=100, color=WHITE) # stroke_widthを1以上にする
filltext = filltext.set_fill(color=GRAY) #set_fillメソッドを用いる
self.add(filltext)
解説
基本は枠付き図形を描画する方法と同じです。
from manim import *
class FillCircle(Scene):
def construct(self):
fillcircle = Circle(color=WHITE)
fillcircle = fillcircle.set_fill(color=GRAY, opacity=1)
self.add(fillcircle)
円を書き、set_fillメソッドを呼び出すことで指定した色に塗りつぶします。
このset_fillメソッドはVMobjectのメソッドであるため、VMobjectの子クラスであるTextにも適用できます。
...のはずなのですが。
class FillText(Scene):
def construct(self):
filltext = Text("枠付き文字テスト", font_size=100, color=WHITE)
filltext = filltext.set_fill(color=GRAY)
self.add(filltext)
普通に書くだけでは全部グレーになります。これはTextは文字枠の太さのパラメータのstroke_widthが標準で0になっているためです。 あとなぜかopacityの初期値が1(circleやrectangleは0)。 なので枠の太さを変えたい場合このパラメータを変えましょう。
class FillText(Scene):
def construct(self):
text1 = Text("枠付き文字テスト", stroke_width=0, font_size=100,
color=WHITE).set_fill(color=GRAY)
text2 = Text("枠付き文字テスト", stroke_width=1, font_size=100,
color=WHITE).set_fill(color=GRAY)
text3 = Text("枠付き文字テスト", stroke_width=2, font_size=100,
color=WHITE).set_fill(color=GRAY)
text4 = Text("枠付き文字テスト", stroke_width=3, font_size=100,
color=WHITE).set_fill(color=GRAY)
text5 = Text("枠付き文字テスト", stroke_width=4, font_size=100,
color=WHITE).set_fill(color=GRAY)
self.add(text1, text2, text3, text4, text5)
Group(*self.mobjects).arrange(
DOWN, buff=.8).set_height(config.frame_height - LARGE_BUFF)
まとめ
- stroke_widthを1以上にする
- set_fillを使う
Discussion