Manim制作动画之渲染文本

Manim中支持渲染两种格式的文本:

  • 普通文本: Text, MarkupText
  • 数学公式: Tex, MathTex

使用方式都类似, 这篇主要演示一下渲染普通文本. 功能列在下面, 然后直接用一个示例搞定.

  • 渲染文本
  • 使用MarkupText, 类似于Html
  • 设置字体
  • 倾斜字体
  • 设置字体粗细
  • 使用参数t2c精确控制一段文字中的字符颜色
  • 设置文本渐变色
  • 设置行间距
  • 迭代文本中的字符

示例代码

class TextDemo(Scene):
    def construct(self):
        # 渲染文本
        text1 = Text("差不多冬至 一早一晚还是有雨", font_size=30).to_edge(UP, buff=-2.5)
        self.add(text1)

        # 使用MarkupText
        text2 = MarkupText(f'当初的<span fgcolor="{YELLOW}">坚持</span>现已令你很怀疑', color=RED).next_to(self.mobjects[-1], DOWN)
        self.add(text2)

        # 指定字体
        text3 = Text("很怀疑 你最尾等到 只有这枯枝", font="YouYuan").next_to(self.mobjects[-1], DOWN)
        self.add(text3)

        # 倾斜字体 slant可选值: NORMAL, ITALIC, OBLIQUE
        text4 = Text("苦恋几多次悉心栽种 全力灌注", slant=ITALIC).next_to(self.mobjects[-1], DOWN)
        self.add(text4)

        # 字体粗细
        text5 = Text("所得竟不如别个后辈 收成时", weight=THIN).next_to(self.mobjects[-1], DOWN)
        self.add(text5)
        text6 = Text("这一次 你真的很介意", weight=ULTRAHEAVY).next_to(self.mobjects[-1], DOWN)
        self.add(text6)

        # 参数t2c 两种写法
        # 第一种 使用下标
        text7 = Text('但见旁人谈情何引诱', t2c={'[1:-1]': BLUE}).next_to(self.mobjects[-1], DOWN)
        self.add(text7)
        # 第二种 使用包含的字符串
        text8 = Text('问到何时葡萄先熟透', t2c={'葡萄': RED}).next_to(self.mobjects[-1], DOWN)
        self.add(text8)

        # 使用渐变色 两种写法
        # 第一种 参数gradient, 颜色可以写多个值
        # v0.19.0版本貌似有bug? 有中文时有时渐变会失效
        text9 = Text("你要静候 再静候", gradient=(RED, BLUE, GREEN)).next_to(self.mobjects[-1], DOWN)
        self.add(text9)
        # 第二种 使用参数t2g, 这种方式和t2c类似, 也有两种写法: 下标和指定字符串
        text10 = Text('就算失收始终要守', t2g={'[1:-1]': (RED, GREEN)}).next_to(self.mobjects[-1], DOWN)
        self.add(text10)
        text11 = Text('日后 尽量别教今天的泪白流', t2g={'尽量别教': (RED, BLUE)}).next_to(self.mobjects[-1], DOWN)
        self.add(text11)

        # 行间距
        text12 = Text("留低击伤你的石头\n从错误里吸收", line_spacing=3).next_to(self.mobjects[-1], DOWN)
        self.add(text12)

        # 迭代文本
        text13 = Text("也许 丰收月份尚未到你也得接受").next_to(self.mobjects[-1], DOWN)
        for letter in text13:
            letter.set_color(random_bright_color())
        self.add(text13)

效果如下:

查看系统所有字体

import manimpango
print(manimpango.list_fonts())

查看所有字体粗细

import manimpango
weight_list = sorted(manimpango.Weight, key=lambda t: t.value)
for weight in weight_list:
    print(f"{weight.name}: {weight.value}")

打印:

THIN: 100
ULTRALIGHT: 200
LIGHT: 300
BOOK: 380
NORMAL: 400
MEDIUM: 500
SEMIBOLD: 600
BOLD: 700
ULTRABOLD: 800
HEAVY: 900
ULTRAHEAVY: 1000

 最后给我的公众号打个广告😁: 算法铁金库. 定期更新编程技术, 谢谢关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值