#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 海报模块配置 从项目统一配置读取,支持环境变量覆盖 """ import os import logging from pathlib import Path logger = logging.getLogger(__name__) # 项目根目录 PROJECT_ROOT = Path(__file__).parent.parent def _get_font_dir_from_config() -> Path: """从项目统一配置读取字体目录""" # 优先使用环境变量 if os.environ.get("POSTER_FONT_DIR"): return Path(os.environ["POSTER_FONT_DIR"]) # 尝试从项目配置读取 try: from core.config_loader import get_config config = get_config() font_path = config.get("paths.resource.font") if font_path: # 相对路径转换为绝对路径 if not font_path.startswith("/"): return PROJECT_ROOT / font_path return Path(font_path) except Exception as e: logger.debug(f"从统一配置读取字体路径失败: {e}") # 默认路径 return PROJECT_ROOT / "assets" / "font" # 字体目录 FONT_DIR = _get_font_dir_from_config() # Emoji 字体路径 - 支持环境变量覆盖 EMOJI_FONT_PATH = Path(os.environ.get( "POSTER_EMOJI_FONT", "/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf" )) # 字体映射 FONT_FILES = { "title_bold": "兰亭粗黑简.TTF", "title_heavy": "兰亭特黑简 GBK.TTF", "title_poster": "华康海报体简.ttc", "title_cute": "字体管家棉花糖.TTF", "body_regular": "腾祥麦黑简.TTF", "handwrite": "邓玉二笔体.ttf", } def get_font_path(font_name: str) -> Path: """获取字体完整路径""" if font_name == "emoji": return EMOJI_FONT_PATH filename = FONT_FILES.get(font_name, FONT_FILES["body_regular"]) return FONT_DIR / filename def validate_fonts() -> dict: """验证字体文件是否存在""" result = {"valid": True, "missing": []} for name, filename in FONT_FILES.items(): path = FONT_DIR / filename if not path.exists(): result["valid"] = False result["missing"].append((name, str(path))) if not EMOJI_FONT_PATH.exists(): result["valid"] = False result["missing"].append(("emoji", str(EMOJI_FONT_PATH))) return result