fonts: ตัวอย่างการ hint ค.ควาย

Topic: 
 
ค่า cvt ที่เกี่ยวข้องคือ
cvt_dict = {
    ...
    "w_1001":           71,     #1001   =width of kho_kwai
    "w_690":            14,     #690    =
    "front_kai":        11,     #113    =front spacing of ko_kai
    "hstem":            8,      #184    =horizontal stem thick
    "headstem":         258,    #116    =head stem thick
    "headstem_plus_hole":   259, #268   =head stem thick + head hole width
    "vheight_shoot":    184,    #1147   =overshoot height
    "vstem_curve":      185,    #156    =curve range vertical stem
    ...
}
ภาพลายเส้น
โครง ค.ควาย แนวแกน X
เส้นทาง hint ในแนวแกน X เริ่มที่จุด 52
srp0                52
เคลื่อนไปที่จุดใกล้สุด 33 ด้วยระยะ front_kai
mirp[rp0,min,rnd,grey] front_kai 33
กำหนดความหนาของเส้นหน้า ที่จุด 8
mirp[min,rnd,grey]  hstem 8
เคลื่อนไปกำหนดความกว้างของตัวอักษรที่จุดขวาสุด 39 ด้วยความกว้าง w_1001
mirp[rp0,rnd,grey]  w_1001  39
กำหนดช่องไฟหลัง
mdrp[rnd,white]     53
กำหนดความหนาของเส้นหลัง ที่จุด 1
mirp[min,rnd,grey]  hstem 1
มาเริ่มกันใหม่ที่จุด 8
srp0                8
เคลื่อนลงข้างล่าง สู่จุด 11 (เพื่อจะนำไปสู่ฐานของเส้นหน้า) ให้การแรเงาเป็น white เพื่อแยกเส้นหน้ากับคอของหัวอักษร
mdrp[rp0,rnd,white] 11
เนื่องจากเส้นตรงนี้บางมาก จึงกำหนดจุดเพื่อคงระยะอย่างน้อย ที่จุด 27 กำหนดเป็น min
mdrp[min,rnd,grey]  27
จากจุด 11 เคลื่อนไปลงจุด 30
mdrp[rp0,rnd,grey]  30
กำหนดความหนาของฐาน ที่จุด 29
mirp[min,rnd,grey]  hstem 29
กลับไปที่จุด 11
srp0                11
เคลื่อนไปที่จุด 14 ด้วยการแรเงา white อีกครั้ง เพื่อแยกเส้นให้เด็ดขาด
mdrp[rp0,rnd,white] 14
คงความหนาของส่วนคอดไว้
mdrp[min,rnd,grey]  25
ย้อนกลับไปตั้งต้นที่จุด 33 อีกครั้งหนึ่ง เพื่อจะสร้างหัวอักษร โดยให้ระยะ จาก 14-49 เป็นตัวรองรับการทดจุด
srp0                33
เพื่อความแน่นอนแม่นยำ เราจะเคลื่อนจุดไปหาจุดขวาสุดของหัวอักษร โดยกำหนดค่าเป็น w_690
(จำเป็นต้องให้แม่นยำ เนื่องจากช่องว่างตรงหัวอักษรมีจำกัดมาก) แล้วจึงกำหนดขนาดความหนาหัวอักษรและรูย้อนกลับอีกที
mirp[rp0,rnd,grey]  w_690   20
mirp[min,rnd,grey]  headstem 43
mirp[rnd,grey]      headstem_plus_hole 49
เกลี่ยจุดเป็นคำสั่งสุดท้าย
IUP[x]
แนวแกน Y
เส้นทาง hint ในแนวแกน Y ทำงานในแกน Y
SVTCA[y-axis]
เริ่มที่จุด 0
MDAP[rnd]           0
บอกว่าจุด 29 อยู่ในระดับเดียวกัน
ALIGNRP             29
เคลื่อนไปกำหนดจุดสูงสุดด้วยค่า vheight_shoot
mirp[rp0,rnd,grey]  vheight_shoot  36
กำหนดความหนาตรงส่วนนี้ด้วยค่า vstem_curve
mirp[min,rnd,grey]  vstem_curve  5
จากจุด 36 เดิม เคลื่อนไปส่วนบนของหัวอักษรที่จุด 17 เนื่องจากไม่กังวลระยะมากนัก จึงใช้การเคลื่อนแบบไม่อ้างค่า cvt คือคำสั่ง MDRP
(เหตุที่ใช้จุด 36 แทนที่จะเป็นจุด 1 หรือ จุด 0 ในการอ้างอิงสำหรับหัวอักษร ค.ควาย เนื่องจากความสวยงามในการวาดหัวอักษร จะขึ้นกับโค้งด้านบนมากว่าฐานด้านล่าง)
mdrp[rp0,rnd,grey]  17
กำหนดขนาดหัวโดยใช้เทคนิกเหมือนเดิม คือกำหนดความหนาด้านบน เคลื่อนไปกำหนดขนาดรวม และกำหนดความหนาด้านล่าง
mirp[min,rnd,grey]  headstem  46
mirp[rp0,rnd,grey]  headdia  23
mirp[min,rnd,grey]  headstem  40
ย้ายมาที่จุด 29 เพื่อมากำหนดความหนาตรงจุดนั้น
srp0                29
mdrp[min,rnd,grey]  11
เกลี่ยจุดสำคัญ โดยให้ท้องตัวอักษรเป็นจุดเริ่มต้น คือจุด 5 และความหนาของฐานเป็นจุดสิ้นสุด คือจุด 11
srp1                5
srp2                11
sloop               4
ip                  33 8 2 39
เกลี่ยจุดที่เหลือ
IUP[y]
เสร็จแล้ว
แต่ถึงแม้จะป้องกันอย่างไร รูปร่างฟอนต์แบบตัว ค.ควาย จะยังมีปัญหาในตอนทดจุดอยู่ดี
คือที่ขนาด 17 ppem หัวอักษรจะชิดติดกับแกนขวาของอักษร
(สรุปเป็นปอยต์ตามความละเอียดของจอภาพคือ 72dpi=17pt, 85dpi=14.5pt, 96dpi=13pt)
ดูจากเมนู View -> Grid Fit -> Show Grid Fit -> 17pt 72dpi ได้ภาพดังนี้
17ppem gridfit แก้ด้วยการขยับจุดจำนวน 8 จุด ในแนวแกน X คือ
จุด 2 ขยับไปทางขวา 8px คือ +8px ที่ 17ppem สูตรคือ
+8px ค่าในตาราง delta hint คือ 15
No.of step -8 -7 -6 -5 -4 -3 -2 -1 +1 +2 +3 +4 +5 +6 +7 +8
Selector 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
17ppem นำมาลบด้วย 9 (ลบด้วย 9 เสมอ) คือ 6
ค่า 6 จะเป็น 4 บิตบน และค่า 15 คือ 4 บิตล่าง รวมกันคือ 6*16+15=143
จะได้คู่ของการทำ delta hint คือ จุด 2 และค่าผลรวม 143 เขียนสรุปย่อดังนี้
ที่ 17 ppem
จุด 2 ขยับ +8 = 2 143
จุด 39 ขยับ +8 = 39 143
จุด 0 ขยับ +8 = 0 143
จุด 1 ขยับ +8 = 1 143
จุด 3 ขยับ +6 = 1 141
จุด 38 ขยับ +6 = 38 141
จุด 37 ขยับ +4 = 37 139
จุด 4 ขยับ +4 = 4 139
นับรวมได้ 8 คู่ จะได้โค๊ดจำลองดังนี้ กำหนดการทำงานในแกน X
SVTCA[x-axis]
ใส่ delta hint โดยใส่จำนวนคู่ไว้เป็นค่าแรก
deltap1             8 2 143 39 143 0 143 1 143 3 141 38 141 37 139 4 139
ภาพหลังการขยับแล้วจะป็นดังนี้
17ppem after gridfit เสร็จแล้ว
เมื่อนำมาถอดด้วย dfont.py จะได้โค๊ด instruction ดังนี้
PUSHB_1
 49
PUSHW_1
 259
PUSHB_1
 43
PUSHW_1
 258
NPUSHB
 22
 20
 14
 33
 25
 14
 11
 29
 8
 30
 27
 11
 8
 1
 8
 53
 39
 71
 8
 8
 33
 11
 52
SRP0
MIRP[rp0,min,rnd,grey]
MIRP[min,rnd,grey]
MIRP[rp0,rnd,grey]
MDRP[rnd,white]
MIRP[min,rnd,grey]
SRP0
MDRP[rp0,rnd,white]
MDRP[min,rnd,grey]
MDRP[rp0,rnd,grey]
MIRP[min,rnd,grey]
SRP0
MDRP[rp0,rnd,white]
MDRP[min,rnd,grey]
SRP0
MIRP[rp0,rnd,grey]
MIRP[min,rnd,grey]
MIRP[rnd,grey]
IUP[x]
NPUSHB
 10
 39
 2
 8
 33
 4
 11
 5
 11
 29
 40
PUSHW_1
 258
PUSHB_1
 23
PUSHW_1
 257
PUSHB_1
 46
PUSHW_1
 258
PUSHB_7
 17
 5
 185
 36
 184
 29
 0
SVTCA[y-axis]
MDAP[rnd]
ALIGNRP
MIRP[rp0,rnd,grey]
MIRP[min,rnd,grey]
MDRP[rp0,rnd,grey]
MIRP[min,rnd,grey]
MIRP[rp0,rnd,grey]
MIRP[min,rnd,grey]
SRP0
MDRP[min,rnd,grey]
SRP1
SRP2
SLOOP
IP
IUP[y]
NPUSHB
 17
 139
 4
 139
 37
 141
 38
 141
 3
 143
 1
 143
 0
 143
 39
 143
 2
 8
SVTCA[x-axis]
DELTAP1
 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.