Files
font2pic/scripts/generate-font-list.py
2026-02-08 18:28:39 +08:00

91 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
生成字体清单文件
扫描 frontend/public/fonts/ 目录下的所有字体文件,同时生成:
1. frontend/public/fonts.json
2. miniprogram/assets/fonts.json
3. miniprogram/assets/fonts.js
"""
import os
import json
from pathlib import Path
def scan_fonts(font_dir='frontend/public/fonts'):
"""扫描字体目录,返回字体信息列表"""
fonts = []
font_dir_path = Path(font_dir)
if not font_dir_path.exists():
print(f"字体目录不存在: {font_dir}")
return fonts
# 递归遍历 fonts 目录(支持多级分类)
for font_file in sorted(font_dir_path.rglob('*')):
if not font_file.is_file():
continue
if font_file.suffix.lower() not in ['.ttf', '.otf']:
continue
relative_parent = font_file.parent.relative_to(font_dir_path)
category_name = str(relative_parent).replace('\\', '/')
if category_name == '.':
category_name = '未分类'
relative_path = font_file.relative_to(font_dir_path).as_posix()
# 生成字体信息
font_info = {
'id': f"{category_name}/{font_file.stem}",
'name': font_file.stem,
'filename': font_file.name,
'category': category_name,
'path': f"/fonts/{relative_path}",
}
fonts.append(font_info)
return fonts
def write_fonts_json(fonts, output_file):
"""写入字体清单 JSON 文件"""
os.makedirs(os.path.dirname(output_file), exist_ok=True)
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(fonts, f, ensure_ascii=False, indent=2)
print(f"字体清单已保存到: {output_file}")
def write_fonts_js(fonts, output_file):
"""写入小程序可 require 的 JS 清单文件"""
os.makedirs(os.path.dirname(output_file), exist_ok=True)
content = "module.exports = " + json.dumps(fonts, ensure_ascii=False, indent=2) + "\n"
with open(output_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"字体清单已保存到: {output_file}")
def main():
"""主函数"""
# 扫描字体唯一来源frontend/public/fonts
fonts = scan_fonts('frontend/public/fonts')
print(f"找到 {len(fonts)} 个字体文件")
# 同步写入 Web 与小程序清单
write_fonts_json(fonts, 'frontend/public/fonts.json')
write_fonts_json(fonts, 'miniprogram/assets/fonts.json')
write_fonts_js(fonts, 'miniprogram/assets/fonts.js')
# 统计信息
categories = {}
for font in fonts:
category = font['category']
categories[category] = categories.get(category, 0) + 1
print("\n按类别统计:")
for category, count in sorted(categories.items()):
print(f" {category}: {count} 个字体")
if __name__ == '__main__':
main()