💬

Manimで枠付き文字を描画する

2022/03/10に公開

はじめに

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