Как работать с шрифтами WOFF в Python
В этом руководстве показано, как загружать, проверять и конвертировать веб-шрифты WOFF и WOff2 с использованием Aspose.Font FOSS для Python. WOF (Web Open Font Format) - это стандарт для доставки шрифтов в Интернете. Wof 1 использует zlib компрессию, а wof 2 используют Brotli компресию. Оба они включают базовый шрифт TrueType или CFF. Placeholder1 перемещает данные внутреннего шрыфта через чистый API.
Крок за шагом руководство
Шаг 1: Установка упаковки
Установите пакет Aspose.Font FOSS из PyPI с помощью команды pip ниже:
pip install "aspose-font>=1.0.0"Шаг 2: Импорт необходимых классов
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}")Шаг 4: Читать метаданные 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 Сжатый стол. Попробуйте загрузить файл шрифта.
Большой выход WOFF2 WOFF2 использует сжатие Бротли, которое производит меньшие объемы. Если вывод WOFF2 неожиданно большой, убедитесь, что ваш файл не имеет большего объема. Вы начинаете с оптимизированного TTF-источника.
Часто задаваемые вопросы
В чем разница между WOFF и WOff2?
WOFF 1 использует сжатие zlib, а WOff 2 - Brotli. В WOF2 обычно достигается 20-30% лучшее сжимание, чем в WOFC 1. Оба они включают одни и те же базовые данные шрифтов TrueType или CFF.
Могу ли я получить доступ к таблицам шрифтов из файла WOFF?
Да, используйте… inner_font собственность, чтобы получить базовый TtfFont, тогда … доступные таблицы через inner_font.ttf_tables.
Поддерживает ли библиотека метаданные WOFF?
Да, оба. WoffFont и в том числе: Woff2Font выявлять metadata_xml имущество содержащий необязательный блок метаданных XML.