เกร็ดเกี่ยวกับโปรแกรม 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 พิกเซล (ส่วนใหญ่ลองที่ขนาดฟอนต์ประมาณ 11 ปอยนต์)
ถ้าผ่านข้อกำหนดดังกล่าว การ Hint จะได้ผลดีที่สุด
- การทำงานกับส่วนโค้งที่เป็น Quadratic ไม่ยากจนเกินไปนัก หัดสักพักก็จะชิน เมื่อชินแล้วจะพบว่าการบังคับส่วนโค้ง ง่ายกว่าแบบ Cubic เสียอีก เพราะโดนบังคับด้วยจุดขนาบ
- อนาคตของ Truetype Hint น่าจะเสื่อมความนิยมลงไปเรื่อย ๆ ผกผันกับขนาดความละเอียดของจอภาพที่จะละเอียดขึ้นไปเรื่อย ๆ
- การทำให้การ Hint แบบ Adobe ได้ผลดี ควรปรับความหนาของตัวอักษรในแนวนอนให้มีความสม่ำเสมอ จึงจะได้ความสูงของตัวอักษรที่เท่า ๆ กัน ที่ขนาดตัวอักษรต่าง ๆ กัน
เพิ่มเติม
- Printer-friendly version
- Log in or register to post comments
- 16753 reads
Comments
มาแสดงตัวครับ ...
ก่อนอื่นกราบสวัสดีอาจารย์ คิดถึงนะครับ ไม่ได้สนทนากันนานแล้ว สบายดีมั้ยครับ ...
เข้ามาอ่านเว็บอาจารย์ประจำนะครับ ไม่ได้หายไปไหน นี่ล็อกอินเข้ามาก็เกือบลืมพาสเวิร์ดไปแล้วนะเนี่ย ...
เรื่อง fontforge ขนาดอาจารย์ขยายความให้แล้ว ผมไล่อ่านมีนแฮะ (ไม่เข้าใจเลยดีกว่า) ...
อาจารย์ครับอธิบายเล็กๆ hint กับ anti-alias มันเหมือนและต่างกันอย่างไรครับ?
แล้วเครื่องมือตัวนี้มีโอกาสสร้างฟอนต์ได้คมชัดเหมือนกัน Tahoma มั้ยครับ?
กราบสวัสดี
กราบสวัสดีคุณสมเจตน์เช่นกันครับ
เอ่อ ความรู้ไม่พอที่จะอธิบายได้น่ะครับ เอาเป็นว่าอ่านที่เขาอธิบายไว้ดีแล้วดีกว่าน่ะครับ
FontForge ด้อยเรื่อง Hinting ถ้าจะทำให้ได้ดี ต้องใช้โปรแกรมอื่นประกอบด้วยครับ ลองดูที่ linux.thai.net - ThaiFonts-Scalable
ว่าแต่ว่าคุณสมเจตน์ได้ลองฟอนโลมาบุตรหรือยัง ความรู้ผมทำได้แค่นี้อ่ะ
ส่วนฟอนต์ Tahoma มันลึกเกินไป เจาะไม่ไหวเด้อ
ฝากลองฟอนต์โลมาบุตรให้ด้วยจิ
ดาวน์โหลดที่ ลองทำฟอนต์ใช้เอง ๒
ผมพบข้อบกพร่องตรงที่ ผมต้องการให้มันเห็นหัวตัวอักษรให้ชัดเจน แต่มันดันไปขัดกับการ Hint มันเลยทำให้ดูไม่ค่อยสวยเวลาตัวเล็กมาก ๆ
ขอบคุณครับ
จะลองนำฟอนต์ไปลองใช้ดูครับ ถ้าเวิร์คจะนำไปใส่ LiveCD ส่วนตัวซะเลย ...
ผมเห็นไฟล์นามสกุล .sfd คืออะไร และใช้ทำอะไรครับ ... ^^
sfd
เป็นไฟล์ข้อมูลฟอนต์ของโปรแกรม FontForge ครับ ก่อนที่จะผลิตออกมาเป็นทรูไทป์
การเอาไฟล์ต้นฉบับแนบไปด้วยทำให้สามารถแก้ไขพวกข้อมูลภายในได้ (รวมถึงข้อมูลการ Hint ด้วย) ง่ายกว่ามาคลำจากไฟล์ TTF ครับ
แจ้งผลการใช้งานครับ....
เพิ่งจะเริ่มลองใช้ฟอนต์อาจารย์ ตอนแรกดูไม่แตกต่างจากโลมาเท่าไหร่ กำลังจะโพสต์แจ้งบั๊กบางประการแล้ว เหลือบไปเห็น update สุดยอดเลยครับอาจารย์ 10-autohint.conf เด็ดขาดมาก ตัวอักษรคมชัดขึ้นทันตา อาจารย์ผมเนี้ยเก่งจริงเลย ...
แจ้งบั๊กครับลองใช้ฟอนต์ lomaputta มีสระลอยกับตัวอักษรที่มีสระบนและล่างพร้อมกัน ตัวอย่างเช่น บุ๊ หรือ รุ่ สระตัวบนจะลอยสูงครับ แต่กับฟอนต์โลมาจะแสดงผลได้ถูกต้อง วันนี้พบความผิดปกติเท่านี้ครับ ...
ขอบคุณอาจารย์มากเลยครับ
ปล.ขณะที่พิมพ์ comment อยู่ฟอนต์ TlwgTypewriter จะแสดงสูงต่ำเป็นตัวลูกคลื่นแหะ ไม่รู้มีผลจาก 10-autohint หรือปล่าวนิ ...
TlwgTypewriter
ใช่ครับ ถ้าแถบ 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