چگونه با فونت های WOFF در Python کار کنیم
این راهنمای نشان می دهد که چگونه برای بارگذاری، بررسی و تبدیل فونت های وب WOFF و WofF2 با استفاده از Aspose.Font FOSS برای Python.WOFf (Web Open Font Format) استاندارد برای تحویل فونتی در وب است. WIFF 1 از فشرده سازی zlib استفاده می کند و wOF F 2 از Brotli فاش استفاده دارد، هر دو با قرار دادن یک فونتاپ زیر TrueType یا CFF. Aspose.Font فاس هر دوی فرمت ها را بار می گیرد و داده های فونتي داخلی را از طریق API تمیز قرار می دهند.
راهنمای گام به گام
مرحله اول: نصب بسته بندی
نصب بسته FOSS از PyPI با استفاده از دستور Pip زیر:
pip install "aspose-font>=1.0.0"مرحله دوم: کلاس های مورد نیاز واردات
Import FontLoader, FontConverter,و FontType برای بارگذاری و تبدیل فونت های WOFF:
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontTypeمرحله 3: بارگذاری و بررسی یک فونت WOFF
فایل WOFF را با FontLoader.open() و ویژگی های اساسی مانند نام، خانواده و شمار گلیف را بخوانید:
from aspose_font.loader import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")مرحله چهارم: Metadata WOFF را بخوانید
فایل های WOFF ممکن است حاوی یک بلوک متات داده XML با مجوز، اعتبارات و… وی افزود: دسترسی به آن از طریق metadata_xml املاک .
font = FontLoader.open(“MyFont.woff”)
WOFF fonts may include an XML metadata block
xml = getattr(font, “metadata_xml”, None) if xml: print(xml) else: print(“No metadata in this WOFF file”)
### مرحله 5: دسترسی به جدول های TTF داخلی
Both `WoffFont` و `Woff2Font` نمایش یک `inner_font` اموالی که به آن ها داده می شود شما زیرمجموعه ای `TtfFont`.از طریق آن شما می توانید به تمام استاندارد دسترسی داشته باشید. جدول های OpenType.
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“کپی کد”
<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>
مرحله 6: تبدیل TTF به WOFF
یک فونت TTF را بارگذاری کنید و آن را به فرمت WOFF تبدیل کنید. FontType.WOFF به FontConverter.convert():
ttf_font = FontLoader.open(“MyFont.ttf”) woff_font = FontConverter.convert(ttf_font, FontType.WOFF) woff_bytes = woff_font.to_bytes()
from pathlib import Path Path(“MyFont.woff”).write_bytes(woff_bytes)
### مرحله 7: تبدیل TTF به WOFF2
یک فونت TTF را بارگذاری کنید و آن را به فرمت WOFF2 تبدیل کنید. `FontType.WOFF2` به `FontConverter.convert()`:
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“کپی کد”
<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>
مرحله 8: تبدیل بین WOFF و WofF2
تبدیل یک فایل WOFF بارگذاری شده به WofF2 (یا برعکس) با عبور از هدف FontType به FontConverter.convert():
WOFF -> WOFF2
woff_font = FontLoader.open(“MyFont.woff”) woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
WOFF2 -> WOFF
woff2_font = FontLoader.open(“MyFont.woff2”) woff_font = FontConverter.convert(woff2_font, FontType.WOFF)
<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“کپی کد”
<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>
مشکلات و اصلاحات مشترک
FontParseException: Invalid WOFF signature - این فایل یک WOFF معتبر نیست. فاکتور: فایل خراب نشده را بررسی کنید و با بایت های جادویی WOFF شروع می شود.
FontParseException: WOFF table decompression failed یک میز فشرده در داخل فایل WOFF خراب شده است. سعی کنید فایل فونت را دوباره دانلود کنید.
تولید WOFF2 بزرگ WOFF2 از فشرده سازی بوتلی استفاده می کند که باعث تولید کمتری می شود. فایل های غیر WOFF 1 (zlib) اگر خروجی Woff 2 شما به طور غیرمنتظره بزرگ است، مطمئن شوید که شما از یک منبع TTF بهینه شده شروع می کنید.
پرسش های متداول
تفاوت بین WOFF و WofF2 چیست؟?
WOFF 1 از فشرده سازی زلیب استفاده می کند و Woff 2 از فلش Brotli استفاده دارد.WOF F2 معمولا 20 تا 30 درصد بهتر از WIFF 1.
آیا می توانم از یک فایل WOFF به جدول های فونت دسترسی داشته باشم؟?
بله، از آن استفاده کنید. inner_font اموال برای به دست آوردن زیربنایی TtfFont,پس از آن دسترسی به جدول ها از طریق inner_font.ttf_tables.
آیا کتابخانه از متادیت های WOFF پشتیبانی می کند؟?
بله، هر دو WoffFont و Woff2Font نمایش A metadata_xml املاک با استفاده از بلوک متاد داده های XML.