perf(fonts): 优化字体加载性能并添加子集化脚本
将 TTF 字体转换为更高效的 WOFF2 格式,添加字体子集化脚本以减小文件大小 优化字体预加载和显示策略,改进无障碍标签
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
"""字体子集化脚本 - 处理有问题的字体文件"""
|
||||
|
||||
from fontTools.ttLib import TTFont
|
||||
from fontTools.subset import Subsetter
|
||||
import os
|
||||
|
||||
# 读取字符
|
||||
with open('scripts/font-chars.txt', 'r', encoding='utf-8') as f:
|
||||
chars = set(f.read()) - {'\n', '\r', '\t', ' '}
|
||||
|
||||
print(f'📝 需要保留的字符数: {len(chars)}')
|
||||
|
||||
# 加载字体
|
||||
input_font = 'public/fonts/AoyagiReisho.ttf'
|
||||
font = TTFont(input_font)
|
||||
original_size = os.path.getsize(input_font) / 1024 / 1024
|
||||
print(f'📊 原始字体大小: {original_size:.2f} MB')
|
||||
|
||||
# 删除有问题的表
|
||||
problematic_tables = ['gasp', 'mort']
|
||||
for table in problematic_tables:
|
||||
if table in font:
|
||||
print(f'⚠️ 删除有问题的表: {table}')
|
||||
del font[table]
|
||||
|
||||
# 创建子集
|
||||
print('⚙️ 正在创建字体子集...')
|
||||
subsetter = Subsetter()
|
||||
subsetter.populate(chars)
|
||||
|
||||
try:
|
||||
subsetter.subset(font)
|
||||
except Exception as e:
|
||||
print(f'⚠️ 子集化过程中出现警告: {e}')
|
||||
print('继续处理...')
|
||||
|
||||
# 保存 WOFF2
|
||||
output_woff2 = 'public/fonts/AoyagiReisho.woff2'
|
||||
print(f'💾 正在保存 WOFF2: {output_woff2}')
|
||||
font.flavor = 'woff2'
|
||||
font.save(output_woff2)
|
||||
font.close()
|
||||
|
||||
# 统计
|
||||
new_size = os.path.getsize(output_woff2) / 1024 / 1024
|
||||
reduction = (1 - new_size / original_size) * 100
|
||||
|
||||
print(f'\n✨ 优化完成!')
|
||||
print(f'📊 新字体大小: {new_size:.2f} MB')
|
||||
print(f'📉 减小比例: {reduction:.1f}%')
|
||||
print(f'💾 节省空间: {(original_size - new_size):.2f} MB')
|
||||
print(f'\n✅ 字体文件已保存到: {output_woff2}')
|
||||
Reference in New Issue
Block a user