Как работать с шрифтами 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 ниже:
asposefoss/font is not yet published — build from source until it ships. See the project README for build instructions.
Шаг 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”)
```python
from aspose_font.loader import FontLoader
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")<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>
Шаг 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)}")
```python
from aspose_font.loader import FontLoader
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)
```python
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
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)<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>
Шаг 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)
```python
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
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>
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
# 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)Общие проблемы и фиксированные
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.