φυβλαςのβλογ
บล็อกของ phyblas



manim บทที่ ๑๖: การปรับแต่งตัวหนังสือ
เขียนเมื่อ 2021/03/12 00:16

ต่อจาก บทที่ ๑๕

ในบทนี้จะพูดถึงออบเจ็กต์คลาส Text ซึ่งในบทที่ผ่านๆมาก็ได้ใช้มามากแล้วแต่ยังไม่ได้ลงลึกถึงรายละเอียดและการปรับแต่งต่างๆ




การปรับขนาดตัวหนังสือ

ตัวหนังสือที่สร้างจากคลาส Text นั้นสามารถกำหนดขนาดได้ตั้งแต่ตอนที่สร้างขึ้น โดยทั่วไปขนาดของอักษรถูกกำหนดโดยคีย์เวิร์ด ๒ ตัวคือ size และ font_size

ตัวอย่าง ลองเทียบขนาดอักษรที่ได้จากค่า size และ font_size ต่างๆกัน
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        lis_text = []
        for j in range(4):
            for i in range(3):
                s = i+1 # ค่า size
                fs = (j+1)*12 # ค่า font_size
                text = mnm.Text(f'{s},{fs}',size=s,font_size=fs)
                lis_text.append(text)
        vg = mnm.VGroup(*lis_text,buff=0)
        vg.arrange_in_grid(n_cols=3)
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )



หากไม่ได้ใส่ ค่าตั้งต้นจะอยู่ที่ size=1 และ font_size=48

นอกจากนี้ยังมีอีกวิธีที่ใช้กำหนดขนาดของตัวหนังสือได้ ก็คือกำหนดความสูงของข้อความ โดยใช้คีย์เวิร์ด height

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        lis_text = []
        for i in range(9):
            h = (2+i)/5 # ความสูง
            text = mnm.Text(f'{h}',height=h)
            lis_text.append(text)
        vg = mnm.VGroup(*lis_text,buff=0)
        vg.arrange_in_grid(n_cols=3)
        self.play(
            mnm.Write(vg),
            run_time=1.5
        )



เพียงแต่ว่าความสูงในที่นี้คือความสูงรวมทั้งหมด ดังนั้นคำที่ควรจะสูงต่างกันก็จะกลายเป็นอักษรขนาดต่างกัน

เช่น
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        ss = ['ค','คี','คู','คี่','คู่']
        vg = mnm.VGroup(*[mnm.Text(s,height=3.5,color='#aaffdd') for s in ss])
        vg.arrange(mnm.RIGHT)
        self.play(
            mnm.FadeIn(vg),
            run_time=1
        )



หากมีการใส่คีย์เวิร์ด height แล้ว ทั้งคีย์เวิร์ด size และ font_size จะไม่มีผล เพราะขนาดของข้อความจะถูกกำหนดด้วยความสูงแทน




การปรับสีตัวหนังสือ

เรื่องการปรับสีนั้นได้เขียนถึงไปแล้วในบทที่ ๗ นั่นคือใช้คีย์เวิร์ด color หรือถ้าต้องการให้มีการไล่สีต่างไปในแต่ละตัวก็ใช้คีย์เวิร์ด gradient ได้

เช่น
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('ก'*12,gradient=['#dfb9de','#445ba4'])
        self.play(
            text.animate.set_height(1),
            run_time=1
        )



ตัวหนังสือสามารถทำให้มีขอบได้โดยกำหนดค่า stroke_width และเพื่อให้สีพื้นต่างจากสีขอบให้ใส่สีพื้นด้วยคีย์เวิร์ด fill_color แยกจากสีขอบที่กำหนดด้วยคีย์เวิร์ด color
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('มกร',color='#bfffb6',stroke_width=6,fill_color='#2e2c8b')
        self.play(
            text.animate.set_height(5),
            run_time=1
        )






การกำหนดฟอนต์

รูปแบบฟอนต์ของข้อความกำหนดได้โดยคีย์เวิร์ด font เช่น
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        abc = 'กขคงจabcde'
        text1 = mnm.Text(abc,font='Tahoma',size=3)
        text2 = mnm.Text(abc,font='Courier',size=3)
        text3 = mnm.Text(abc,size=3)
        vg = mnm.VGroup(text1,text2,text3)
        vg.arrange(mnm.DOWN)
        self.play(
            mnm.FadeIn(vg),
            run_time=0.5
        )
        self.wait(0.5)



สำหรับภาษาไทยแล้วบางฟอนต์อาจใช้แล้วมีปัญหา สำหรับในตอนนี้ที่มีปัญหาน้อยที่สุดคือฟอนต์ Tahoma ในที่นี้ก็จะยกตัวอย่างโดยใช้ฟอนต์นี้เป็นหลัก




การทำตัวเอียงตัวหนา

การทำตัวหนาทำได้โดยใส่คีย์เวิร์ด weight='BOLD' ส่วนตัวเอียงทำได้โดยใส่ slant='ITALIC'

เพียงแต่ว่าสำหรับภาษาไทยนั้นฟอนต์ส่วนใหญ่จะยังมีปัญหาในการทำตัวหนาและตัวเอียง ฟอนต์ที่แสดงผลได้โดยไม่มีปัญหาคือ Tahoma

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text1 = mnm.Text('ไม่เอียงไม่หนา',font='Tahoma')
        text2 = mnm.Text('ไม่เอียงแต่หนา',weight='BOLD',font='Tahoma')
        text3 = mnm.Text('เอียงแต่ไม่หนา',slant='ITALIC',font='Tahoma')
        text4 = mnm.Text('ทั้งเอียงทั้งหนา',slant='ITALIC',weight='BOLD',font='Tahoma')
        vg = mnm.VGroup(text1,text2,text3,text4)
        vg.arrange(mnm.DOWN)
        vg.set_height(7)
        self.play(
            vg.animate.set_color('#63e9ce'),
            run_time=1
        )






การปรับสีเฉพาะบางส่วน

สามารถเลือกปรับสีเฉพาะบางส่วนของข้อความได้โดยใส่คีย์เวิร์ด t2c โดยใส่ดิกชันนารีของตัวอักษรคู่กับสีที่ต้องการ

สำหรับภาษาไทยอาจมีปัญหาเวลาใช้งานในส่วนนี้ แต่ถ้าใช้ฟอนต์ Tahoma จะไม่มีปัญหา

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('ฉันเป็นศิษย์\n\nจอมปราชญ์\n\nจริงๆนะ',
                        font='Tahoma',
                        t2c={"น":'#ffaaaa',"ปราชญ์":'#aaaaff'})
        self.play(
            text.animate.set_height(7),
            run_time=1
        )



สามรถใช้เมธอด .set_color_by_t2c เพื่อตั้ง t2c ภายหลังได้ ซึ่งสามารถใช้กับ .animate เพื่อทำเป็นภาพเคลื่อนไหวได้

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        t2c = {'เกิดใหม่':'#c163e9','สไลม์':'#63c5e9'}
        text = mnm.Text('เกิดใหม่ทั้งที\n\nก็เป็นสไลม์ไปซะแล้ว',font='Tahoma')
        text.set_width(12)
        self.play(
            text.animate.set_color_by_t2c(t2c),
            run_time=1
        )



นอกจากนี้ยังอาจเปลี่ยนสีแค่บางส่วนได้โดยการระบุตำแหน่งที่ต้องการเปลี่ยนสี

ตัวอย่าง
import manimlib as mnm

class Manimala(mnm.Scene):
    def construct(self):
        text = mnm.Text('การล้างแค้นของ\n\nผู้กล้าโล่ผงาด',font='Tahoma')
        text.set_width(12)
        self.add(text)
        self.play(
            text[3:7].animate.set_color('#63d8e9'),
            text[-4:].animate.set_color('#e9d863'),
            run_time=1
        )



การเปลี่ยนสีเฉพาะคำยังทำแบบไล่สีได้ด้วย โดยใช้คีย์เวิร์ด t2g แทน t2c ส่วนการตั้งสีภายหลังก็ทำได้โดยเมธอด .set_color_by_t2g ซึ่งวิธีใช้คล้ายกับเมธอด .set_color_by_t2c แค่จะได้เป็นตัวหนังสือไล่สี

ตัวอย่าง
import manimlib as mnm

    class Manimala(mnm.Scene):
        def construct(self):
            t2g = {"ข้องใจเหรอ":['#ff9ad5','#a4ff9a']}
            text = mnm.Text('ผู้กล้าโล่ผงาดแล้วไง\n\nข้องใจเหรอครับ?',font='Tahoma')
            text.set_width(13)
            self.play(
                text.animate.set_color_by_t2g(t2g),
                run_time=0.7
            )
            self.wait(0.3)





อ่านบทถัดไป >> บทที่ ๑๗




-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> manim

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
maya
javascript
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
เรียนภาษาจีน
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
หลักการเขียนทับศัพท์ภาษาจีนกวางตุ้ง
การใช้ unix shell เบื้องต้น ใน linux และ mac
หลักการเขียนทับศัพท์ภาษาจีนกลาง
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
บันทึกการเที่ยวสวีเดน 1-12 พ.ค. 2014
แนะนำองค์การวิจัยและพัฒนาการสำรวจอวกาศญี่ปุ่น (JAXA)
เล่าประสบการณ์ค่ายอบรมวิชาการทางดาราศาสตร์โดยโซวเคนได 10 - 16 พ.ย. 2013
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
บันทึกการเที่ยวญี่ปุ่นครั้งแรกในชีวิต - ทุกอย่างเริ่มต้นที่สนามบินนานาชาติคันไซ
หลักการเขียนทับศัพท์ภาษาญี่ปุ่น
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ
ทำไมถึงอยากมาเรียนต่อนอก
เหตุผลอะไรที่ต้องใช้ภาษาวิบัติ?

ไทย

日本語

中文