เกร็ดเกี่ยวกับโปรแกรม FontForge

 

โปรแกรม FontForge เป็นโปรแกรมที่ใช้ออกแบบฟอนต์ของลินุกซ์ที่ได้รับความนิยม มีความสามารถสูง แต่มีข้อเสียคือ ทำ AutoHint ได้แย่มาก เพราะโปรแกรมจะกันเหนียวด้วยการกำหนดแถบการ Hint ไว้กว้างเกินไป

การกำหนดแถบการ Hint ไว้กว้าง ทำให้เวลาแสดงฟอนต์ทางจอภาพ อักษร ก ไก่ จะดูเตี้ยกว่าอักษร ข ไข่ ซึ่งไม่ถูก AutoHint ไว้กว้างแบบนั้น

ถ้าจะทำให้ได้ผลการ Hint ที่ดี แบบที่เรา ๆ ท่าน ๆ สามารถทำได้เอง โดยไม่ต้องใช้ฝีมือระดับเทพ ก็คือการ Hint เองด้วยมือ
ซึ่งทำได้โดยการกำหนดสองจุดคู่ที่จะทำการ Hint แล้วสั่ง Add HHint หรือ Add VHint ตามลักษณะของส่วนโค้งตัวอักษรนั้น ๆ

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

การทำปุ่มลัดสำหรับ FontForge

เริ่มด้วยการติดตั้งแพกเกจที่จำเป็นในการคอมไพล์ก่อน
$ sudo aptitude install libfreetype6-dev
(แพกเกจอื่น ๆ ไม่แน่ใจครับ อาจตรวจดูจากข้อผิดพลาดตอนสั่ง ./configure ก็ได้)

ไปเอาซอร์สมาก่อนคือไฟล์ fontforge_full-20070312.tar.bz2

เมื่อได้ไฟล์มาแล้วก็แตกไฟล์ออกก่อน
$ tar xfj fontforge_full-20070312.tar.bz2

คอมไพล์และติดตั้ง
$ cd fontforge-20070312
$ ./configure
$ make
$ sudo make install

ต่อไปเป็นการสร้างไฟล์สำหรับกำหนดปุ่มลัด
ทำตามคู่มือ ในการนำเอาไฟล์ FontForge-MenuShortCuts.pot ออกมา
$ cd fontforge-20070312/fontforge
$ make -f Makefile.in FontForge-MenuShortCuts.pot

เราจะได้ไฟล์ FontForge-MenuShortCuts.pot
เราจะแก้ไขในไฟล์นี้โดยกำหนดให้ Add HHint ใช้ปุ่มลัดเป็น Alt+Ctl+1
และ Add VHint ใช้ปุ่มลัดเป็น Alt+Ctl+2
$ vi FontForge-MenuShortCuts.pot

...
#: charview.c:8105
msgid "Add HHint|No Shortcut"
msgstr "Alt+Ctl+1" 

#: charview.c:8106
msgid "Add VHint|No Shortcut"
msgstr "Alt+Ctl+2"
...

คอมไพล์ไฟล์ pot
$ msgfmt -o FontForge-MenuShortCuts.mo FontForge-MenuShortCuts.pot

ย้ายไฟล์นี้ไปไว้ที่ไดเรกทอรี่ที่เก็บ locale ของเครื่อง
ถ้าตั้ง locale เป็น en_US.UTF8 คำสั่งจะเป็น
$ sudo mkdir -p /usr/local/share/locale/en_US/LC_MESSAGES
$ sudo mv FontForge-MenuShortCuts.mo /usr/local/share/locale/en_US/LC_MESSAGES

เสร็จเรียบร้อยแล้ว สั่งรันโปรแกรมด้วยคำสั่ง
$ /usr/local/bin/fontforge -dontopenxdevices [ชื่อไฟล์ฟอนต์]

ผลที่ได้จากการทำ Hint ด้วยมือ ดูดีขึ้นกว่าทำ AutoHint มากครับ

จากความรู้ที่ได้นี้ สามารถสรุปการ Hint ได้คือ

  • ส่วนในของฟอนต์เลือกใช้ AutoHint เนื่องจากต้องการให้เกิดการเบลอภายในให้มากที่สุด
  • ส่วนนอกของฟอนต์ คือ จุดสูงสุดและต่ำสุด ต้อง Hint เองด้วยมือ เพราะต้องการให้ส่วนสูงมีความคงที่
  • เพิ่มเติม

  • อ่านมาจาก http://osdir.com/ml/fonts.fontforge.user/2006-08/msg00030.html
    บอกว่า ปกติ FontForge ไม่ทำ Hint ของทรูไทป์โดยตรง แต่เป็นของ Type1
    ถ้าจะพยายามทำ Hint ให้ทรูไทป์ วิธีทำคือให้เปลี่ยนส่วนโค้งเป็นแบบ Quadratic
    Element -> Font Info ... -> เลือก Quadratic Splines

    หลังจากนั้นจึงทำ AutoHint และ AutoInstruction แล้วจึงสั่งผลิตฟอนต์ทรูไทป์
    เลือกช่วงฟอนต์ที่ต้องการ -> Hints -> AutoHint
    Hints -> AutoInstr
    Files -> Generates Fonts

    ทดลองแล้วได้ผลดีพอควร

  • 50-05-05 ลองทดสอบเรื่อง Truetype Hint ได้ความว่า
    ถึงแม้ว่า Fontforge จะทำ Truetype Hint ได้แย่มากก็ตาม แต่เราก็อาจบังคับทำได้ โดยได้ผลดีพอควร โดยมีข้อแม้ว่า :-
    1. จุดต่าง ๆ ที่กำกับส่วนโค้ง ต้องเลือกใช้จุดให้ตรงจริง ๆ ทั้งสามชนิดคือ จุดส่วนโค้ง จุดหัวมุม และจุดแทนเจนต์ ห้ามใช้จุดมั่วเด็ดขาด
    2. ขนาดความหนาของส่วนตัวอักษร และจุดกำกับส่วนโค้งต่าง ๆ ควรอยู่ในตำแหน่งทางเรขาคณิตแบบง่าย ๆ
    3. ส่วนโค้งที่ยาวมาก ต้องมีจุดแบ่งส่วนกำกับเสมอ
    4. ถ่าหากจุดเริ่มต้นส่วนโค้ง ไม่อยู่ในตำแหน่งทางเรขาคณิตอย่างง่าย ควรใช้จุดแทนเจนต์กำกับอยู่ใกล้ ๆ (เช่น ปลายหางของตัว จ.จาน เป็นต้น)
    5. เมื่อทดสอบแล้วพบว่ามีบางอักขระที่มีอาการฟุ้ง ให้ลองปรับลดหรือเพิ่มความกว้างของอักขระนั้นที่ละ 1 พิกเซล (ส่วนใหญ่ลองที่ขนาดฟอนต์ประมาณ 11 ปอยนต์)

    ถ้าผ่านข้อกำหนดดังกล่าว การ Hint จะได้ผลดีที่สุด

  • การทำงานกับส่วนโค้งที่เป็น Quadratic ไม่ยากจนเกินไปนัก หัดสักพักก็จะชิน เมื่อชินแล้วจะพบว่าการบังคับส่วนโค้ง ง่ายกว่าแบบ Cubic เสียอีก เพราะโดนบังคับด้วยจุดขนาบ
  • อนาคตของ Truetype Hint น่าจะเสื่อมความนิยมลงไปเรื่อย ๆ ผกผันกับขนาดความละเอียดของจอภาพที่จะละเอียดขึ้นไปเรื่อย ๆ
  • การทำให้การ Hint แบบ Adobe ได้ผลดี ควรปรับความหนาของตัวอักษรในแนวนอนให้มีความสม่ำเสมอ จึงจะได้ความสูงของตัวอักษรที่เท่า ๆ กัน ที่ขนาดตัวอักษรต่าง ๆ กัน

Comments

 

ก่อนอื่นกราบสวัสดีอาจารย์ คิดถึงนะครับ ไม่ได้สนทนากันนานแล้ว สบายดีมั้ยครับ ...
เข้ามาอ่านเว็บอาจารย์ประจำนะครับ ไม่ได้หายไปไหน นี่ล็อกอินเข้ามาก็เกือบลืมพาสเวิร์ดไปแล้วนะเนี่ย ...

เรื่อง fontforge ขนาดอาจารย์ขยายความให้แล้ว ผมไล่อ่านมีนแฮะ (ไม่เข้าใจเลยดีกว่า) ...

อาจารย์ครับอธิบายเล็กๆ hint กับ anti-alias มันเหมือนและต่างกันอย่างไรครับ?

แล้วเครื่องมือตัวนี้มีโอกาสสร้างฟอนต์ได้คมชัดเหมือนกัน Tahoma มั้ยครับ?

 

กราบสวัสดีคุณสมเจตน์เช่นกันครับ
เอ่อ ความรู้ไม่พอที่จะอธิบายได้น่ะครับ เอาเป็นว่าอ่านที่เขาอธิบายไว้ดีแล้วดีกว่าน่ะครับ

FontForge ด้อยเรื่อง Hinting ถ้าจะทำให้ได้ดี ต้องใช้โปรแกรมอื่นประกอบด้วยครับ ลองดูที่ linux.thai.net - ThaiFonts-Scalable

ว่าแต่ว่าคุณสมเจตน์ได้ลองฟอนโลมาบุตรหรือยัง ความรู้ผมทำได้แค่นี้อ่ะ
ส่วนฟอนต์ Tahoma มันลึกเกินไป เจาะไม่ไหวเด้อ
ฝากลองฟอนต์โลมาบุตรให้ด้วยจิ
ดาวน์โหลดที่ ลองทำฟอนต์ใช้เอง ๒
ผมพบข้อบกพร่องตรงที่ ผมต้องการให้มันเห็นหัวตัวอักษรให้ชัดเจน แต่มันดันไปขัดกับการ Hint มันเลยทำให้ดูไม่ค่อยสวยเวลาตัวเล็กมาก ๆ

 

จะลองนำฟอนต์ไปลองใช้ดูครับ ถ้าเวิร์คจะนำไปใส่ LiveCD ส่วนตัวซะเลย ...

ผมเห็นไฟล์นามสกุล .sfd คืออะไร และใช้ทำอะไรครับ ... ^^

 

เป็นไฟล์ข้อมูลฟอนต์ของโปรแกรม FontForge ครับ ก่อนที่จะผลิตออกมาเป็นทรูไทป์
การเอาไฟล์ต้นฉบับแนบไปด้วยทำให้สามารถแก้ไขพวกข้อมูลภายในได้ (รวมถึงข้อมูลการ Hint ด้วย) ง่ายกว่ามาคลำจากไฟล์ TTF ครับ

 

เพิ่งจะเริ่มลองใช้ฟอนต์อาจารย์ ตอนแรกดูไม่แตกต่างจากโลมาเท่าไหร่ กำลังจะโพสต์แจ้งบั๊กบางประการแล้ว เหลือบไปเห็น update สุดยอดเลยครับอาจารย์ 10-autohint.conf เด็ดขาดมาก ตัวอักษรคมชัดขึ้นทันตา อาจารย์ผมเนี้ยเก่งจริงเลย ...

แจ้งบั๊กครับลองใช้ฟอนต์ lomaputta มีสระลอยกับตัวอักษรที่มีสระบนและล่างพร้อมกัน ตัวอย่างเช่น บุ๊ หรือ รุ่ สระตัวบนจะลอยสูงครับ แต่กับฟอนต์โลมาจะแสดงผลได้ถูกต้อง วันนี้พบความผิดปกติเท่านี้ครับ ...

ขอบคุณอาจารย์มากเลยครับ

ปล.ขณะที่พิมพ์ comment อยู่ฟอนต์ TlwgTypewriter จะแสดงสูงต่ำเป็นตัวลูกคลื่นแหะ ไม่รู้มีผลจาก 10-autohint หรือปล่าวนิ ...

 

ใช่ครับ ถ้าแถบ Hint กว้าง ช่วงตรงนั้นจะถูกแสดงแบบเบลอ ๆ ทำให้ดูเหมือนตัวอักษรต่ำลง ตัว TlwgTypeWriter เก่าแล้ว คงยังไม่ได้อัปเดต (ผมดูฟอนต์ที่เป็นมาตรฐานคือโลมา-นรสีห์-ครุฑแล้ว การ Hint ดีมากอยู่แล้วครับ)

ส่วนเรื่องวรรณยุกต์กับสระอุ สระอู เดี๋ยวพรุ่งนี้ผมแก้ครับ คุณเทพท่านบอกวิธีให้แล้ว อยู่ในคอมเมนต์เรื่อง ThaiFonts-Scalable 0.4.6 Released

 

ก่อนหน้านี้ใช้ไฟร์ฟอกซ์ดูเพจไหนที่ fix font เช่นใช้ Tahoma หรือ Lucida Sans เช่นเว็บผมเป็นต้น จะแสดงฟอนต์ของมันได้คมชัดสวยงามดี ในที่นี้รวมถึงตัวอักษรอังกฤษด้วย (ผมใช้ fonts.conf สูตรคุณกำธรครับ) พอมาใช้ 10-autohint.conf มีผลทำให้อักษรเหล่านี้หนาและเบลอขึ้นครับอาจารย์ อยากได้ 2 อย่างเลย ไม่อยากได้อย่างใดอย่างหนึ่งครับ แบบงกๆนิ ...

 

ยังมือไม่ถึงจ้า ;D
เดี๋ยวรอถ้าได้เข้าไปใน CVS ของ linux.thai.net คงแก้ได้หลุดหมด
ผมกะว่าใช้เวลาสักสามวัน ไหงมันออกมายังงี้ก็ไม่รู้ ;D

อุ๊บ! แต่ถ้าใช้อุบุนตู Feisty ผมว่าควรลบ fonts.conf ของคุณกำธรออก (รวมทั้งของผมด้วย ถ้ามี) แล้วใช้ของต้นฉบับคือไฟล์ 65-ttf-thai-tlwg.conf น่าจะดีกว่านะครับ (อาจเก็บของคุณกำธรไว้ใน /etc/fonts/conf.avail ไว้กันเหนียวก็ได้)
$ sudo mv /etc/fonts/conf.d/65-thaifont.conf /etc/fonts/conf.avail
$ sudo ln -sf /etc/fonts/conf.avail/65-ttf-thai-tlwg.conf /etc/fonts/conf.d

 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.