บทนำ
TrueType ฟอนต์ (.ttf) และชุดย่อย OpenType ของพวกมัน (.otf) เป็นรูปแบบฟอนต์ที่โดดเด่นบนระบบปฏิบัติการสมัยใหม่ ทั้งสองรูปแบบใช้โครงสร้างตารางไบนารีเดียวกันที่อิงจากสเปค OpenType Aspose.Font FOSS สำหรับ Python เปิดเผยโครงสร้างนี้ผ่าน TtfFont ให้การเข้าถึงโดยตรงไปยังตาราง OpenType แยกแต่ละรายการ, ข้อมูลคู่ kern, แกนฟอนต์แบบปรับได้, และโครงร่าง glyph.
คลาส TtfFont ขยายคลาสฐาน Font ด้วยเมธอดเฉพาะ TTF รวมถึง get_blob, get_table_bytes, set_table_bytes และ instantiate สำหรับการล็อกแกนฟอนต์แบบปรับได้ คุณสมบัติ TtfTableSet (ttf_tables) ให้การเข้าถึงแบบพิมพ์สำหรับตาราง OpenType ที่พบบ่อยที่สุด: head, hhea, maxp, os2, name, post.
ไลบรารีนี้ถูกเผยแพร่บน PyPI ในชื่อ aspose-font และได้รับอนุญาตภายใต้ MIT License ไม่มีการพึ่งพาทางการค้าใดๆ ที่จำเป็น.
คุณสมบัติหลัก
การโหลดฟอนต์ TTF และ OTF
ใช้ FontLoader.open เพื่อโหลดไฟล์ฟอนต์ TrueType หรือ OpenType ใดก็ได้:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)
FontLoader.open ตรวจจับรูปแบบฟอนต์จากส่วนหัวของไฟล์ ทั้งไฟล์ .ttf (TrueType) และไฟล์ .otf (OpenType CFF) ได้รับการสนับสนุนและทั้งสองจะคืนค่าอินสแตนซ์ของ TtfFont.
การเข้าถึงตาราง OpenType ผ่าน TtfTableSet
คุณสมบัติ ttf_tables คืนค่า TtfTableSet ที่มีตัวเข้าถึงแบบกำหนดประเภทสำหรับตาราง OpenType ทั่วไป แต่ละคุณสมบัติจะคืนค่าออบเจกต์ของตารางหรือ None หากไม่มี:
คุณสมบัติ ttf_tables บน TtfFont คืนค่าอินสแตนซ์ของ TtfTableSet. ตัวเข้าถึงตารางที่มีให้:
head—HeadTable | Nonehhea—HheaTable | Nonemaxp—MaxpTable | Noneos2—Os2Table | Nonename—NameTable | Nonepost—PostTable | None
แต่ละพร็อพเพอร์ตีจะคืนค่าอ็อบเจ็กต์ของตารางหรือ None หากตารางนั้นไม่มีอยู่ในไฟล์ฟอนต์. เข้าถึงพร็อพเพอร์ตี TtfTableSet เพื่อตรวจสอบตารางเฉพาะก่อนที่จะอ่าน. สำหรับตารางที่ไม่ได้ครอบคลุมโดยตัวเข้าถึงที่มีชื่อ, ใช้ TtfTableSet.get_raw(tag) เพื่อดึงไบต์ดิบโดยแท็ก OpenType สี่ตัวอักษร.
การอ่านไบต์ดิบของตาราง
get_table_bytes(tag) คืนค่าไบต์ดิบสำหรับตาราง OpenType ใด ๆ. ใช้ get_blob(tag) สำหรับเวอร์ชันปลอด None ที่จะคืนค่า None เมื่อไม่มีตารางนั้น:
TtfFont มีสองวิธีสำหรับการเข้าถึงตารางดิบ:
get_table_bytes(tag) -> bytes— คืนค่าไบต์ดิบสำหรับตารางที่มีชื่อ (โยนข้อยกเว้นหากไม่มี)get_blob(tag) -> bytes | None— คืนค่าNoneหากตารางไม่มีอยู่ (เวอร์ชันปลอดภัย)
วิธีการทั้งสองรับแท็กตาราง OpenType ที่มีสี่อักขระ เช่น "cmap", "GDEF" หรือ "GPOS". ใช้ get_blob เมื่อเป็นตารางที่เป็นตัวเลือกเพื่อให้คุณสามารถตรวจสอบ None ก่อนทำการประมวลผลได้.
คู่เคิร์น
get_kern_pairs() คืนค่าคู่เคิร์นทั้งหมดที่เข้ารหัสในฟอนต์. แต่ละ KernPair มี left (GlyphId), right (GlyphId), และ value (int ในหน่วยฟอนต์):
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")
for pair in pairs[:5]:
print(f" Left: {pair.left} Right: {pair.right} Value: {pair.value}")
เมตริกซ์ฟอนต์
เมตริกซ์มาตรฐานสามารถเข้าถึงได้ผ่านคุณสมบัติ metrics:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")
การสนับสนุนฟอนต์ตัวแปร
สำหรับฟอนต์ตัวแปร, TtfFont เปิดเผย is_variable, variable_axes และ named_instances. ใช้ get_axis(tag) เพื่อดึงแกนเฉพาะโดยใช้แท็กสี่อักขระของมัน:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/RobotoFlex.ttf")
print(f"Is variable: {loaded.is_variable}")
print(f"Axes : {len(loaded.variable_axes)}")
เมธอด get_axis(tag) บน TtfFont ดึง VariableAxis ตามแท็กสี่อักขระของมัน (เช่น "wght" สำหรับน้ำหนัก, "wdth" สำหรับความกว้าง). มันคืนค่า None หากแกนไม่มีอยู่ในตาราง fvar ของฟอนต์.
การแปลงแบบอักษร
to_bytes(font_type) แปลงแบบอักษรเป็นรูปแบบอื่น ใช้ enum FontType เพื่อระบุเป้าหมาย:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
fh.write(ttf_bytes)
print(f"Serialized: {len(ttf_bytes)} bytes")
เริ่มต้นอย่างรวดเร็ว
ติดตั้งไลบรารี:
.venv/bin/pip install aspose-font
โหลดฟอนต์ TTF และตรวจสอบมัน:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("Roboto-Regular.ttf")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Glyphs : {loaded.num_glyphs}")
print(f"Variable : {loaded.is_variable}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
รูปแบบทั้งหมดโหลดผ่าน FontLoader.open. ฟอนต์ TTF/OTF จะคืนค่าอินสแตนซ์ TtfFont.
โอเพ่นซอร์ส & การให้สิทธิ์
Aspose.Font FOSS สำหรับ Python ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT คุณสามารถใช้ในโครงการส่วนบุคคล, เชิงพาณิชย์และโอเพนซอร์สได้โดยไม่เสียค่าใช้จ่าย โค้ดต้นฉบับพร้อมให้ดาวน์โหลดบน GitHub และแพคเกจจะถูกแจกจ่ายผ่าน PyPI ในรูปแบบ aspose-font.