เวลาผมทำฟอนต์ผมใช้โปรแกรม Fontforge ตลอดมาในการทำน้ำหนักต่างๆ
ซึ่งเขียนด้วย Python Script สำหรับการทำ Interpolate โดยเฉพาะ
จากการทำ Interpolate ทำให้ได้ไฟล์ fontforge สำหรับน้ำหนักต่างๆ ออกมา
หากต้องทำการ Generate เอง มันจะเหนื่อยมาก จึงมี Python Script มาช่วยทุ่นแรง
เครื่องต้องติดตั้ง Fontforge ใช่ NPTemplate เป็นตัวอย่างในการทำ Interpolate
เฉพาะตัว a และตัว ก
ดาวน์โหลดได้ที่
https://www.dropbox.com/s/nqm5vvh91qxj2ap/NPInterpolate.zip?dl=1--ตัวอย่างการเขียนคำสั่ง Interpolate--
call fontforge -script interpolate.py ^
-master-01 "Srcs/NPNaipolTemplate-Thin.sfd" ^
-master-02 "Srcs/NPNaipolTemplate-Black.sfd" ^
-feature "Srcs/Features/thaicore.fea" ^
-familyname "NPNaipolTemplate" ^
-fontname "{familyname-nospace}-{weight-number}" ^
-fullname "{familyname} {weight}" ^
-percent "(1-1)/(9-1)" ^
-weight "Thin" ^
-export "Srcs/Instants/{familyname-nospace}-{weight}.sfd"
note:
-master-01, -master-02 <Path>
คือฟอนต์ที่ต้องการนำมา Blend ร่วมกันโดยที่ -master-01
จะมีค่าน้ำหนักน้อยกว่า -master-02
-feature <Path>
Importe ot feature ไฟล์เข้ามา
-familyname <String>
ตั้งชื่อแฟมมิลี่ให้กับไฟล์ที่จะได้จากการทำ Interpolate
-fontname <String>
ตั้งชื่อฟอนต์ให้กับไฟล์ที่จะได้จากการทำ Interpolate
-fullname <String>
ตั้งชื่อฟอนต์สำหรับให้มนุษย์อ่านได้ให้กับไฟล์ที่จะได้จากการทำ Interpolate
-percent <String | Number>
มีค่าระหว่าง 0-1 สามารถใส่เครื่องคำนวนได้
สูตรคำนวน Range to percent (value - min) / (max - min)
เช่นมีทั้งหมด 9 น้ำหนักอยากได้ Regular ให้ใส่ (4-1)/(9-1)
หรือใส่ค่าตามแบบ css "(400-100)/(900-100)"
-weight <Thin, ExtraLight, Light, Regular, Medium, SemiBold, Bold, ExtraBold, Black>
ใส่ชื่อน้ำหนักที่กำหนด
-width <UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, Medium, SemiExpanded, Expanded, ExtraExpanded, UltraExpanded>
ใส่ชื่อความกว้างที่กำหนด
-export <Path>
เส้นทางที่ต้องการ export
--ตัวอย่างการเขียนคำสั่ง Generate--
fontforge -script generate.py ^
-fonts "./Srcs/Instants" ^
-export "Export\NPNaipolTemplate\TTF\{fullname-hypden}.ttf" ^
-export "Export\NPNaipolTemplate\OTF\{fullname-hypden}.otf" ^
-ttf-referred-family "{familyname}" ^
-ttf-referred-styles "{fullstylename}" ^
-hint ^
-remove-overlap ^
-unlink ^
-add-extrema ^
-feature-gsub "Srcs/features/thaicore.fea"
note:
-font <Path>
ที่อยู่ฟอนต์ที่ต้องการ
-fonts <Path>
ที่อยู่โฟลเดอร์ฟอนต์ที่ต้องการ
-export <Path>
เส้นทางที่ต้องการ export
-ttf-referred-family <String>
กำหนดชื่อแฟมิลี่ในที่จะแสดงในส่วนเมนูฟอนต์
-ttf-referred-styles <String>
กำหนดชื่อสไตล์ในที่จะแสดงในส่วนเมนูฟอนต์
-hint
auto hint ด้วย Fontforge
-remove-overlap
หากตัวอักษรมีหลายส่วนประกอบให้ Merge ทุกส่วนเข้าด้วยกัน
-unlink
หากมีการลิงค์ Ref ข้าม glyph กัน ให้ทำการ unlink referrance
-add-extrema
เพิ่ม Node ในส่วนยอดสุดของส่วนโค้ง
-feature-gsub <Path>
import OT file แทนที่ feature เดิมใน GSUB TABLE
-italic <Number>
เอียง glyphs ตามองศาที่ระบุ เช่น 12 องศา พร้อมสลับตำแหน่ง Unicode
a -> a.italic เปลี่ยน a ปกติไปใช้ a.italic และเพิ่ม suffix "Italic" ต่อท้ายชื่อฟอนต์
-oblique
เหมือน italic แต่ไม่การสลับตำแหน่ง Unicode และเพิ่ม suffix "Oblique" ต่อท้ายชื่อฟอนต์
-skew <Number>
เหมือน italic แต่ไม่การสลับตำแหน่ง Unicode และไม่มีการเพิ่ม suffix
-change-version <Number>
เปลี่ยนเลขเวอร์ชั่นฟอนต์
-change-family <String>
เปลี่ยนชื่อฟอนต์ตอน Genenrate
-em <Number>
เปลี่ยนความสูงของ Em square
-round
ทำให้ค่า Nodes ต่างให้มีค่าจำนวนเต็ม
-swap-glyph <Glyph1> <Glyph2>
สำหรับต่ำแหน่ง Unicode Glyph1 ไป Glyph2
-swap-glyph-weight <Weight...> <Glyph1> <Glyph2>
สำหรับต่ำแหน่ง Unicode Glyph1 ไป Glyph2 เมื่อถึงการ Generate น้ำหนักที่ระบุ ตัวอย่างเช่น
-swap-glyph-weight "Bold ExtraBold Black" "a" "a.2"
-swap-glyph-width <Width...> <Glyph1> <Glyph2>
สำหรับต่ำแหน่ง Unicode Glyph1 ไป Glyph2 เมื่อถึงการ Generate ความกว้างที่ระบุ
-swap-glyph-weight-width <Weight...> <Width...> <Glyph1> <Glyph2>
สำหรับต่ำแหน่ง Unicode Glyph1 ไป Glyph2 เมื่อถึงการ Generate น้ำหนักและความกว้างที่ระบุ
-swap-glyph-extension <String.. เช่น alt2>
สำหรับต่ำแหน่ง Glyph ตามชื่อ Extension ที่ระบุเช่น a ไปใช้ a.alt2
-swap-glyph-weight-extension <Weight...> <String.. เช่น alt2>
สำหรับต่ำแหน่ง Glyph ตามชื่อ Extension ที่ระบุเช่น a ไปใช้ a.alt2 เมื่อถึงน้ำหนักที่ระบุ
-swap-glyph-width-extension <Weight...> <String... เช่น alt2>
สำหรับต่ำแหน่ง Glyph ตามชื่อ Extension ที่ระบุเช่น a ไปใช้ a.alt2 เมื่อถึงความกว้างที่ระบุ
-swap-glyph-weight-width-extension <Weight...> <Width...> <String เช่น alt2>
สำหรับต่ำแหน่ง Glyph ตามชื่อ Extension ที่ระบุเช่น a ไปใช้ a.alt2 เมื่อถึงน้ำหนักและความกว้างที่ระบุ
-remove-extensions <String...>
ลบ Glyph ตาม extensions ที่ระบุ
-remove-glyphs <String...>
ลบ Glyph ตามชื่อ Glyph ที่ระบุ
เดี๋ยวค่อยมาเขียนอธิบายคำสั่งต่างๆ เลื่อยๆนะครับ
หากใครใจร้อนสามารถแกะซอสโค้ดดูได้เลยครับ