- 新增 PosterSmartEngine,AI 生成文案 + 海报渲染 - 5 种布局支持文本换行和自适应字体 - 修复按钮/标签颜色显示问题 - 优化渐变遮罩和内容区域计算 - Prompt 优化:标题格式为产品名+描述
84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
#!/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
|