วันอังคารที่ 13 พฤษภาคม พ.ศ. 2551

Thai Font Tuning in Hardy 1

ใน Ubuntu Hardy (8.04) มีฟอนต์ไทยใหม่มาให้ใช้ 3 ตัว คือ Waree, Umpush และ Sawasdee โดยเฉพาะ Waree นั้นถูกกำหนดให้เป็นฟอนต์ปริยายแทน Loma แล้ว ดังนั้นเมื่อติดตั้งครั้งแรกจะเป็นหน้าตาฟอนต์แปลกไปไม่คุ้นตา ก็ด้วยเหตุนี้นี่เอง

ในตอนแรกนี้จะปรับแต่งฟอนต์เพียงเล็กน้อย โดยยังคงใช้ Waree เหมือนเดิม ก่อนอื่นมาดูก่อนว่าปัญหาที่เราจะพบคืออะไร

1-default

ดูกันใกล้ ๆ

1-default-1 1-default-2

นี่คือปัญหาที่เราจะพบเมื่อติดตั้ง Hardy สังเกตว่าตัวอักษรขนาดเล็ก หัวจะหายบ้าง รูตรงหัวตันบ้าง รูปทรงผิดเพี้ยนค่อนข้างมาก ส่วนตัวอักษรที่ใหญ่ขึ้นกลับมีปัญหาที่แปลกไปอีกแบบคือเส้นที่บาง ๆ จะหายไป สังเกตตรงประโยคตัวอย่าง

ปัญหานี้เกิดจาก โดยปกติแล้ว Hardy จะกำหนดให้ใช้ font hinting แบบ native คือเป็น hint ที่ฝังมากับฟอนต์เลย เช่นฟอนต์ Bitstream Vera ซึ่งจะแสดงได้สวยงาม คมชัดไม่เบลอในทุกขนาดตัวอักษร ส่วนฟอนต์ที่ไม่มี hint จะยังคงแสดงเบลอ ๆ เหมือนเดิม แต่ฟอนต์ Waree นั้นมี hint อยู่ด้วย แต่อย่างที่ทราบการดีว่าการทำ hint ให้สมบูรณ์นั้นยากมาก ฟอนต์ Waree จึงแสดงออกมาดีที่สุดได้แบบที่เห็น

ทางแก้แบบง่ายคือ ลดระดับของ hint ลงเหลือแค่ระดับ slight หรือ "นิดหน่อย" โดยเลือกเมนู "ระบบ" --> "ปรับแต่งพื้นโต๊ะ" --> "รูปโฉม" แล้วเลือกแท็บ "แบบอักษร" แล้วคลิกปุ่ม "รายละเอียด..." จากนั้นตั้งค่า Hinting เป็น "นิดหน่อย" ตามภาพ

2-font-render-details

ผลคือ

3-screen2

3-screen2-1 3-screen2-2

การตั้งระดับ Hint เป็น slight จะทำให้การเรนเดอร์ฟอนต์เน้นที่รูปทรงของฟอนต์มากกว่าความคมชัด ทำให้เห็นได้อย่างชัดเจนว่ารูปทรงของฟอนต์ถูกต้องสวยงาม แต่ก็มีความเบลอมากเช่นกัน และยังทำให้ฟอนต์ภาษาอังกฤษเบลอไปด้วย

สำหรับท่านที่พอใจกับการตั้งฟอนต์แบบนี้ก็หยุดได้เลยครับ แต่สำหรับผมแล้ว ผมต้องการมากกว่านั้น ผมอยากให้ตัวอักษรภาษาอังกฤษชัดเท่าที่มันจะชัดได้ ในขณะที่ภาษาไทยก็ไม่เพี้ยนถึงขั้นเส้นหาย หัวหาย

ทางออกคือ libfreetype ในปัจจุบันมี autohint ซึ่งเป็นวิธีการเรนเดอร์ฟอนต์โดยไม่ต้องพึ่ง hint ที่มาในตัวฟอนต์เอง แต่จะสร้าง hint อัตโนมัติ ซึ่งตัวหลัง ๆ นี่มันทำได้ดีมาก ๆ แต่เราจะใช้ autohint เฉพาะกับฟอนต์ที่เราต้องการ ในที่นี้คือฟอนต์ภาษาไทยเท่านั้น ฟอนต์ที่มี native hint ดี ๆ อย่าง Bitstream Vera เราจะไม่แตะ จะใช้ native hint เหมือนเดิม

ขั้นแรก สร้างแฟ้ม .fonts.conf ไว้ที่ home ของท่านเองโดยให้มีเนื้อหาดังนี้

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<test name="family">
<string>Loma</string>
<string>Garuda</string>
<string>Norasi</string>
<string>Kinari</string>
<string>Purisa</string>
<string>TlwgMono</string>
<string>TlwgTypewriter</string>
<string>Waree</string>
<string>Umpush</string>
<string>Sawasdee</string>
</test>
<edit name="autohint" mode="assign"><bool>true</bool></edit>
</match>
</fontconfig>


จากนั้นให้ล็อกเอาท์ออกจากระบบ แล้วล็อกอินเข้ามาใหม่ แล้วตั้งค่าฟอนต์ให้เป็นตามภาพนี้

4-font-render-details-full

ผลลัพธ์สุดท้าย

5-screen3

5-screen3-1 5-screen3-2

จะเห็นว่าตัวอักษรภาษาอังกฤษมีความคมชัดเป็นปกติ ส่วนตัวไทยนั้นมีหัวหาง เส้นต่าง ๆ ครบถ้วน อ่านได้ชัดเจนดี มีเพี้ยนบ้างแต่น้อยมาก ๆ

เป็นอย่างไรครับ เห็นความงามของฟอนต์ Waree หรือยัง

5 ความคิดเห็น :

  1. สวัสดีครับพี่ต้น



    ผมใช้วิธี # dpkg-reconfigure fontconfig-config เลือก auto-hint มันจะไปสร้าง sym link ใน /etc/fonts/conf.d/10-autohint.conf เหมือนกับวิธีของพี่เลยครับ



    จากนั้นในหน้า font appearance เลือก none hinting จะได้การเรนเดอฟอนต์คล้ายๆ กับ Mac เลยครับ : )



    ปล. ลิงก์บล็อก iam.dhammajati.net ผมเลิกใช้แล้วนะครับ ตอนนี้ผมเร่ร่อน ไม่มีบล็อกเป็นหลักแหล่ง



    ปล2. เมื่อคืนท่านออกญาโชคพาไปเลี้ยงหมี่ไก่หาดใหญ่ด้วยล่ะครับ : )

    ตอบกลับลบ
  2. ถ้าวิธีนั้นมันจะทำ autohint ให้กับทุกฟอนต์น่ะครับ รวมถึงฟอนต์ที่มี native hint สวย ๆ อยู่แล้วอย่าง Bitstream Vera ผมเลยต้องเลี่ยง โดยกำหนด native hint แล้วตั้งให้ autohint เฉพาะบาง font เอา

    จริง ๆ ตอนนี้ตั้งให้เป็น hintslight ก็สวยกำลังดีละ

    แต่ถ้าตั้ง none hinting ก็น่าจะไม่ใช้ hint ใด ๆ เลยนี่นา เดี๋ยวขอไปลองก่อน

    ตอบกลับลบ
  3. Anonymous22/5/51 14:01

    ผมมีปัญหาการแสดงผมดังรูปข้างล่างครับ วิธีแก้ตอนนี้คือ ปรับ Appearance --> Fonts --> Application font ไปเป็น Waree book แทน sans ไปพลางๆ ก่อน

    มีวิธีปรับตรงไหนอีกหรือเปล่าครับ (ผม dist-upgrade มาจาก gusty อีกที)



    ตอบกลับลบ
  4. รับเป็นโจทย์ไว้ก่อนครับ ลอง ๆ ดูบ้างแล้ว เกี่ยวกับ firefox มีโจทย์ใหม่ ๆ อีกหลายอย่าง เดี๋ยวจะมานำเสนอใหม่ครับ

    ตอบกลับลบ