fonts: บันทึกการทดลองทำ DejaVuSansThai รุ่นแรก
Submitted by wd on Mon, 2008-03-31 23:24
Topic:
บันทึกการแปลงฟอนต์ Waree เป็น DejaVuSansThai รุ่นแรก
- ใช้หลักการ instruct โดยพยายามยึดตามแนวของ DejaVu เท่าที่พอแกะออก
ยังขาดการทำ delta hint เพราะยังทำไม่เป็น ดังนั้นการออกแบบฟอนต์และการ instruct จึงพยายามปรับ เพื่อเลี่ยงการทำ delta hint ซึ่งต้องรอศึกษาต่อไป
ทำ delta hint ได้แล้ว แต่เสียเวลาและสายตามากเกินไป จึงพยายามออกแบบโค๊ดให้ลดการทำ delta hint ให้มากที่สุด
ล่าสุดเปลี่ยนแนวคิดการออกแบบเป็น กำหนดจุดให้น้อยที่สุดเพื่อให้ฟอนต์เพี้ยนน้อยที่สุด จึงจำเป็นต้องพึ่งการใช้ delta hint อย่างมาก- ลดความสูงของฟอนต์ไทย ให้เท่ากับอังกฤษตัวเล็ก แล้วพยายามย่นความสูงของสระและพยัญชนะลงมา แต่กระนั้นก็ยังล้นระยะห่างระหว่างบรรทัดของ DejaVu อยู่ดี
- ค่า cvt ของ DejaVu Sans เต็ม 256 ค่าแล้ว แต่มีความจำเป็นต้องเพิ่มค่าของเราเข้าไป ทำให้ต้องอ้างค่าเป็น word แทน byte โค๊ดจึงอาจดูยากขึ้นเล็กน้อย
- เขียนสคริปต์ไพธอน เล็ก ๆ ชื่อ
dfont.py
เอาไว้คลี่และเรียงสแต็ก ใช้ได้ผลดีพอควร แต่สคริปต์ยังขาดการตรวจสอบความถูกต้องของ instructing code ซึ่งถ้าใช้ด้วยพารามิเตอร์--all
อาจทำให้ fontforge หยุดการทำงานได้ - รอปรับปรุงต่อไป - ยังเหลือบั๊กอีกหลายจุด ตัว ค.ควาย จ.จาน ย.ยักษ์ ยังออกแบบไม่ดี ตัว ร.เรือ ธ.ธง ยัง instruct ได้ไม่ดี และยังไม่ได้ทำ
ตัวหนาตัวเอียง และตัวหนาเอียง แต่มีความจำเป็นต้องเว้นวรรคนาน จึงบันทึกไว้เพื่อให้จำได้
ความรู้ที่ได้
- การทำ TrueType Hinting Instruction ตัวอักษรจะเพี้ยนเสมอ ทั้งนี้เนื่องมาจากการบังคับให้ลงจุดในจอมอนิเตอร์ ดังนั้น การ instruct ก็คือการบอกว่าจะให้เพี้ยนยังไง จึงจะทำให้ดูคมชัด
- การเคลื่อนจุดด้วยวิธี indirect เช่นคำสั่ง
MIRP
(ซึ่งต้องอ้างค่าจาก cvt - Control Value Table) มีความแม่นยำแน่นอนกว่าการเคลื่อนค่าแบบ direct (เช่นคำสั่งMDRP
) - คำสั่ง
ip
(Interpolate) จะทำให้ฟอนต์ดูฟุ้ง แต่ระยะที่ได้ แน่นอนกว่าการเคลื่อนจุดแบบ direct (เว้นเสียแต่ถ้าไม่มีการทดลงจุด คืออาร์กิวเมนต์rnd
ควรใช้MDRP
เสมอ ไม่งั้นบางทีอาจเพี้ยน) - ถ้ามีความจำเป็นต้องใช้การ Interpolate อาจทำแค่แกนเดียว ส่วนอีกแกนนึงให้ใช้การเคลื่อนแบบ direct แทน
- พยายามยึดแนวแกนซ้ายขวาและความสูงเฉลี่ยของตัวอักษรไว้ ดังนั้นจึงควรบรรจุค่าความสูงและความกว้างของตัวอักษรในตาราง cvt เสมอ
- ควรออกแบบความกว้างของตัวอักษรให้ดูสม่ำเสมอ แล้วเขียนโค๊ดโดยดูจากตาราง cvt เป็นสำคัญ แต่จะมีข้อยกเว้นเป็นบางตัวอักษรที่มีหัวอักษรอยู่ตรงกลางฟอนต์ เช่น ค.ควาย หรือ ด.เด็ก อาจต้องยอมทิ้งค่าความกว้างจาก cvt โดยต้องไล่จุดไปตามแนวที่ผ่านหัวอักษรไปเรื่อย ๆ ไม่งั้นเวลาแสดงผลที่ขนาดปอยต์ต่าง ๆ หัวอักษรอาจเยื้องไปทางซ้ายบ้างขวาบ้าง บางครั้งอาจดูลีบติดไปทางแกนอักษรข้างใดข้างหนึ่งบ้าง - อาจแก้ได้ด้วย delta hint
- การทำ delta hint หรือ grid fitting โดยกำหนดให้เป็น version 1 จะได้ฟอนต์ที่ดูนุ่มนวลดีกว่า version 0
- ถ้าไม่ทดลงจุดด้วยอาร์กิวเมนต์
rnd
ห้ามใช้คำสั่งSHPIX
ที่จุดนั้นเด็ดขาด จะมีปัญหาเลอะตอนพิมพ์ โดยเฉพาะในแนวแกน Y
ผลการทดลอง - บนลินุกซ์ ความละเอียดจอภาพ 85 dpi
ดูดีที่ 12 และ 13 ปอยต์ตั้งแต่ 7 ปอยต์ลงไป อ่านไม่ได้ตั้งแต่ 18 ปอยต์ขึ้นไป ไม่มีปัญหาเรื่องการ hintแย่สุดที่ 14 ปอยต์ ที่เหลือนอกจากนี้ พอดูได้รุ่นล่าสุด (510519) ปรับด้วย delta shift hint พยายามทำให้ดูดีในทุก ๆ ppem แต่ปรับละเอียดที่ 14,15 และ 16 ppem- ความกระชับของโค๊ด ขึ้นกับแนวคิดในการไล่เส้นทางเดินของฟอนต์
- ความสวยของฟอนต์ขึ้นกับความเพียรในการทำ delta hint
ดาวน์โหลดไฟล์ฟอนต์ ttf ล่าสุด (รุ่น 520401)
ดาวน์โหลดไฟล์ซอร์ส
DejaVuSansThai-src-510331.tar.gzปรับปรุงช่องไฟ (ยังไม่ดี) ปรับปรุงเรื่องหัวเล็กน้อย (ดีขึ้น) และปรับหลัก instruction บางส่วน (ดีขึ้น)
DejaVuSansThai-src-510408.tar.gz- รุ่นสุดท้ายก่อนทำ delta hint DejaVuSansThai-src-510415.tar.gz
เริ่มทำ delta hint (gridfit) ของตัว ค.ควาย ด.เด็ก และปรับปรุงตัว ร.เรือ DejaVuSansThai-src-510416.tar.gz- ทำตัวหนาเพิ่ม DejaVuSansThai-src-510420.tar.gz
- ปรับวิธี hint ใหม่หมด เลียนแบบจาก Serif ซึ่งพยายามเลียนจาก Tahoma อีกที โดยปรับละเอียดที่ 16 ppem และปรับหัวให้ดูนุ่มขึ้น ที่ 14,15 และ 16 ppem
DejaVuSansThai-src-510519.tar.gz - ทำตัวหนาเสร็จ ปรับวิธี hint อีกเล็กน้อย โดยใช้หลัก hint เท่าที่จำเป็น
รุ่นนี้คิดว่าสมบูรณ์พอจะเอาไปใช้งานได้แล้ว DejaVuSansThai-src-510523.tar.gz - ทำรุ่นใหม่ โดยใช้ฟังก์ชั่น SHPIX บีบหัวให้ฟุ้งน้อยลง จึงทำให้ดูเหมือนกับคมขึ้น ตามไปช่วย hint ให้ภาษาลาวเล็กน้อย แต่ยังไม่เสร็จ DejaVuSansThai-src-510612.tar.gz
- hint ภาษาลาวเสร็จ ปรับแก้เรื่องเส้นขีดฆ่า ตามคำแนะนำของคุณเทพ (แต่ตัวหนายังไม่ได้แก้ คิดว่าจะแก้ใหญ่ในภายหลังครับ) DejaVuSansThai-src-510618.tar.gz
- เพิ่มตาราง open type (แก้ปัญหา OpenOffice-2.4 "สระอำ" เพี้ยน) และตรวจแก้ข้อมูลตาราง lookup gsub ขาดไป : DejaVuSansThai-src-510823.tar.gz
- เริ่มการใช้ตาราง GPOS ลดสระหลบทั้งหมด ย้าย ฐ และ ญ ไม่มีฐานขึ้นข้างบน ดัดแปลงลายเส้นเล็กน้อย hint แบบให้กลมกลึง (คมชัดน้อยลง) : DejaVuSansThai-src-520218.tar.gz
- hint ตัวหนา(เกือบ)เสร็จ (พักไปงานอื่นก่อน) รุ่นนี้พยายามทดลองเขียนโค๊ดไพธอนแบบนำมาใช้ใหม่ แต่เวลากระชั้นมาก โค๊ดข้างในจึงเลอะเทอะมาก (ตัวหนา) : DejaVuSansThai-src-520303.tar.gz
- เกลา hint ตัวธรรมดาใหม่ โค๊ดเป็นฟังก์ชั่นเพื่อให้การ hint ไปในแนวเดียวกันทุก ๆ อักขระ แก้ปัญหาหัวบางที่ 9-12 ppem ทำให้อ่านง่ายขึ้น ลบการฟุ้งมากไปหน่อยจนทำให้ฟอนต์ดูแห้ง พยายามทำให้ขนาดเส้นตั้งกับเส้นนอนไม่ต่างกันมากนัก ที่ 17-19 ppem ยังไม่ได้แยกวรรณยุกต์เป็น 2 ระดับ (โค๊ดที่เป็นฟังก์ชั่นยังเลอะเทอะอยู่) : DejaVuSansThai-src-520322.tar.gz
- ทำวรรณยุกต์ระดับสอง ปรับช่องไฟและความกว้างฟอนต์ขนาดเล็ก : DejaVuSansThai-src-520401.tar.gz
งานที่เหลือ และที่ตั้งใจจะทำ
- เกลาช่องไฟละเอียด
- ดูเส้นขาดฟอนต์ขาวพื้นหลังดำ
- ทำตัวหนาให้มาแนวเดียวกัน
ภาพตัวอย่างของรุ่นล่าสุด
ตัวหนา
ภาพจาก OpenOffice.org รุ่นล่าสุด
oo ตัวหนา
ภาพตัวอย่าง รุ่นแรก (จากจอภาพขนาด 85 dpi)
- Printer-friendly version
- Log in or register to post comments
- 23854 reads
Comments
สุดยอด จนคว้าไม่ถึง!
ทดลองดูแล้ว คมกริ๊บเลยครับ อาจารย์ไชยามิตรชัย (ไม่ธรรมดา) ของผม เห็นบอกว่ารุ่นหนึ่ง เก็บสะสมไว้ก่อนอนาคตอาจจะมีราคา แซว ^^ แสดงต้องมี รุ่น 2 3 .. 99 เลยติดตามตอนต่อไป เลยยังไม่เม้นท์ ผมว่าอ.ใกล้เกจิทางฟอนต์แล้วนะครับ และไม่ต้องถ่อมตัวเลย ...
ผมอ่านเกี่ยวกับเรื่องฟอนต์ของอาจารย์ตั้งแต่ต้น ขอบอกว่าไม่รู้เรื่องเลยครับ ไม่ใช่ว่าอ.อธิบายไม่ดี เพียงแต่ความรู้ผมไม่ถึงจริงๆเลยตามไม่ทัน จะช่วยก็ไม่รู้จะช่วยอย่างไร โยงกลับที่หัวข้อเลยครับ "สุดยอด จนคว้าไม่ถึง" ...
ขออภัยที่ตอบช้า
ขออภัยที่ตอบช้า ช่วงนี้นอนดึกมาก หลาย ๆ วันติดกัน สมองมันมึนหมด
สำหรับเรื่องฟอนต์ ไม่มีอะไรจะถ่อมครับ เพราะยังไม่ค่อยรู้อะไรมากนัก :)
รายงานผล
วันนี้ได้มีโอกาสทดลองใช้ฟอนต์ DejaVuSansThai โมเดลล่าสุด (510416) เห็นเกริ่นว่าใช้เทคนิคใหม่ (delta hint) แตกแฟ้มออกมาจัดหมวดหมู่เรียบร้อยมากครับ และมีฟอนต์สไตล์ bold เพิ่มเข้ามาอีกฟอนต์ ติดตั้งดูผลการใช้งานแล้ว ไม่อยากจะชมเล้ย ชมบ่อย กลัวจะเลี่ยน ในบรรดา "ฟรีฟอนต์ไทยๆ" ที่นำมาเป็นฟอนต์หลักเพื่อใช้แสดงผลหน้าจอคอมพิวเตอร์เท่าที่เคยใช้มา สำหรับฟอนต์นี้ถ้าเป็นนักกีฬาต้องมอบเหรียญทองให้แล้วล่ะครับ เนี้ยบมากๆ ทดสอบกับ monitor 17" Res.1024x768 และ 94 จุด/นิ้ว กำหนดฟอนต์ขนาด 11 แสดงตัว book ได้งามหยดย้อย นอกจากสระ ิ ี ึ ื ที่แจ่มน้อยกว่าอักษรอื่นๆ แสดงได้เล็กและบาง
สำหรับตัวหนายังไม่จ๊าบ (เห็นออกตัวก่อนหน้านี้ว่าทำยาก) แสดงอักษรสูงต่ำหนาบางไม่เท่ากันกลายลูกคลื่น หากลดความหนาบางลงเหลือสัก 2/3 น่าจะสวยกว่า ฮี่ฮี่ ผมมารายงานผลตามหน้าที่ Tester หน่ะครับอาจารย์ และก็คิดว่าอาจารย์คงจะทราบอยู่แล้วด้วย ยิ่งทดสอบรู้สึกทึ่งกับฟอนต์ Tahoma จริงๆครับ แสดงผลได้สวยคมในทุกขนาด ...
เผอิญมีคำถามสงสัยและแก้ปัญหาไม่ตก ลิงค์นี้ ครับอาจารย์ และผมเดาว่าเป็นปัญหาฟอนต์ Unicode ที่กำหนดไม่ตรงกัน และคาดว่าอาจจะแก้ไม่ได้ ก็ดีครับแช่งให้แก้ปัญหาไม่ได้ จะได้โปรโมตฟอนต์ของอาจารย์ซะเลย ผมก็เริ่มประชาสัมพันธ์ไปบ้างแล้ว ...
ตั้งแต่ใช้ลินุกส์มา มีคำถามเรื่องฟอนต์ทีไร ผมมักจะบ่นว่า "เอ... เมื่อไหร่จะมีใครใจบุญทำฟอนต์ สวยๆ คมๆ แบบฟอนต์ Tahoma ให้ใช้สักทีน้า ... " ยิ่งรู้ว่าขั้นตอนการทำฟอนต์ไม่ใช่เรื่องหมูๆ ก็เริ่มทำใจไปแล้ว กลับกลายเป็นคนใกล้ตัวเรานี่เองทำให้ใช้ มามะขอจูบสักที ...
ราตรีสวัสดิ์ ไม่ใช่สิ อรุณสวัสดิ์ ...
สมเจตน์
ขอบคุณครับ ที่แจ้งผลการใช้งาน
ขอบคุณครับ ที่แจ้งผลการใช้งาน จะได้เอาไปปรับปรุงต่อครับ
พร้อมกับส่งการบ้านเพิ่มเป็นตัว Bold ด้วยครับ :)
รายงานผลการใช้(ต่อ)
ตอนนี้ผมใช้ DejaVuSansThai มาเป็นฟอนต์หลักใน Hardy หลังจากที่นำฟอนต์ตัวนี้ไปแนะนำที่บอร์ด UbuntuClub เริ่มมีเพื่อนๆชอบใจและเป็นแนวร่วมช่วยประชาสัมพันธ์แทนให้(โดยไม่ต้องออกแรงเอง) คิดว่าต่อไปคงจะเริ่มใช้มากขึ้นเรื่อยๆ เหตุผลก็เพราะฟรีฟอนต์ เช่น Waree และ Loma มีปัญหาการแสดงผลที่ไม่สวยกับระบบกราฟฟิก(Xorg) รุ่นใหม่ที่นำมาใช้กับ Hardy ประกอบกับฟอนต์ Tahoma แสดงสี่เหลี่ยมประหลาด (ปัญหาที่แจ้งไปก่อนหน้านี้) ได้ฟอนต์อาจารย์เป็นพระเอกขี่ม้าขาวมาช่วยพอดี เลยดังแบบช่วยไม่ได้นิ ...
นอกจาก สระอิ สระอี สระ ... ที่แจ้งให้ทราบก่อนหน้านี้ จริงๆก็พอรับได้ วันนี้พบอักษรที่ดูขัดๆตาอีกตัวครับ "ฐ" ดูแปลกแยกกับพวกพ้อง เลยต้องแจ้นมาฟ้องให้ทราบทันทีครับ ...
สมเจตน์
ขอบคุณครับอยากให้ตัว "ฐ"
ขอบคุณครับ
อยากให้ตัว "ฐ" เป็นอย่างไรบอกได้นะครับ คิดคนเดียวมันวนในอ่างน่ะ :)
เกือบลืม อยากให้มาช่วยกันทำ hint ให้ฟอนต์น่ะครับ
ชักชวนให้หน่อยจิ ทำคนเดียว เวลามันไม่พอน่ะ
ยอดเยี่ยมครับ
ทดลองใช้กับ Ubuntu 8.04 ออกมาสวยงามดีครับ ดีกว่าฟรีฟอนต์ไทยอื่นๆ ที่ใช้มา ขอบคุณมากครับที่สละเวลามาทำสิ่งเหล่านี้ ถ้าพัฒนาต่อไปเรื่อยๆ คงไม่ต้องง้อ Tahoma แล้วล่ะ
comment นิดนึงครับ
อ่านกระทู้ใน Pantip แต่ละบรรทัดยังติดกันไปนิดนึง
เมื่อตัวอักษรขนาดเล็ก จะอ่านยากหน่อยครับ โดยเฉพาะส่วนวรรณยุกต์
ขอบคุณที่รายงานครับเรื่องระยะ
ขอบคุณที่รายงานครับ
เรื่องระยะระหว่างบรรทัด ผมใช้ของ DejaVu เขา ตอนนี้มันเลยยังแคบอยู่ (ด้วยเหตุนี้ สระอิ สระอี จึงต้องแคบตาม)
เห็นคุณเทพบอกว่า เขาจะปรับใหม่เป็น DejaVu-SEA ซึ่งจะปรับระยะให้สูงขึ้นให้เหมาะกับภาษาทางภูมิภาคนี้ ถึงตอนนั้นคงจะดีขึ้นครับ :)