บทนำ

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 | None
  • hhea — HheaTable | None
  • maxp — MaxpTable | None
  • os2 — Os2Table | None
  • name — NameTable | None
  • post — 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.


เริ่มต้นใช้งาน

ทรัพยากรที่เกี่ยวข้อง