- 新增 PosterSmartEngine,AI 生成文案 + 海报渲染 - 5 种布局支持文本换行和自适应字体 - 修复按钮/标签颜色显示问题 - 优化渐变遮罩和内容区域计算 - Prompt 优化:标题格式为产品名+描述
141 lines
4.5 KiB
Python
141 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
测试 poster_v2 模块
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# 添加项目根目录到路径
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
|
|
from poster_v2 import PosterFactory, PosterContent
|
|
|
|
# 输出目录
|
|
OUTPUT_DIR = Path(__file__).parent.parent / "result" / "poster_v2_test"
|
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
def main():
|
|
print("=" * 50)
|
|
print("测试 poster_v2 模块")
|
|
print("=" * 50)
|
|
|
|
factory = PosterFactory()
|
|
|
|
# 测试1: hero_bottom
|
|
print("\n[1] 测试 hero_bottom 布局...")
|
|
poster = factory.generate(
|
|
layout="hero_bottom",
|
|
theme="ocean",
|
|
title="正佳极地海洋世界",
|
|
subtitle="周末带娃去的,企鹅太可爱了",
|
|
details=["含企鹅馆+海豚表演", "儿童免费入场", "停车方便"],
|
|
price="¥199",
|
|
tags=["周末遛娃", "亲子游"]
|
|
)
|
|
poster.save(OUTPUT_DIR / "01_hero_bottom_ocean.png")
|
|
print(f"✓ 保存: 01_hero_bottom_ocean.png")
|
|
|
|
# 测试2: overlay_center
|
|
print("\n[2] 测试 overlay_center 布局...")
|
|
poster = factory.generate(
|
|
layout="overlay_center",
|
|
theme="sunset",
|
|
title="广州三日游",
|
|
subtitle="打卡必去的10个景点",
|
|
tags=["旅行攻略", "广州"]
|
|
)
|
|
poster.save(OUTPUT_DIR / "02_overlay_center_sunset.png")
|
|
print(f"✓ 保存: 02_overlay_center_sunset.png")
|
|
|
|
# 测试3: overlay_bottom (带emoji)
|
|
print("\n[3] 测试 overlay_bottom 布局 (带emoji)...")
|
|
poster = factory.generate(
|
|
layout="overlay_bottom",
|
|
theme="peach",
|
|
emoji="🍰",
|
|
title="发现一家神仙甜品店",
|
|
subtitle="闺蜜推荐的,颜值和味道都绝了",
|
|
highlights=["颜值高", "不踩雷", "出片"],
|
|
details=["招牌千层蛋糕必点", "下午茶套餐更划算"],
|
|
price="¥68",
|
|
tags=["下午茶", "约会"]
|
|
)
|
|
poster.save(OUTPUT_DIR / "03_overlay_bottom_peach.png")
|
|
print(f"✓ 保存: 03_overlay_bottom_peach.png")
|
|
|
|
# 测试4: split_vertical
|
|
print("\n[4] 测试 split_vertical 布局...")
|
|
poster = factory.generate(
|
|
layout="split_vertical",
|
|
theme="mint",
|
|
label="品质优选",
|
|
title="山海度假",
|
|
subtitle="面朝大海春暖花开",
|
|
features=["海景房", "无边泳池", "私人沙滩", "自助早餐"],
|
|
details=["距机场30分钟", "免费停车"],
|
|
price="¥888"
|
|
)
|
|
poster.save(OUTPUT_DIR / "04_split_vertical_mint.png")
|
|
print(f"✓ 保存: 04_split_vertical_mint.png")
|
|
|
|
# 测试5: card_float
|
|
print("\n[5] 测试 card_float 布局...")
|
|
poster = factory.generate(
|
|
layout="card_float",
|
|
theme="latte",
|
|
label="小众宝藏",
|
|
title="山间咖啡民宿",
|
|
subtitle="远离喧嚣,享受慢生活",
|
|
features=["独立庭院", "手冲咖啡", "山景露台", "有机早餐"],
|
|
details=["自驾更方便", "适合2-4人"],
|
|
price="¥458"
|
|
)
|
|
poster.save(OUTPUT_DIR / "05_card_float_latte.png")
|
|
print(f"✓ 保存: 05_card_float_latte.png")
|
|
|
|
# 测试6: 使用 PosterContent 对象
|
|
print("\n[6] 测试 PosterContent 对象...")
|
|
content = PosterContent(
|
|
title="周末露营派对",
|
|
subtitle="一起看星星烤肉吧",
|
|
tags=["露营", "周末活动"]
|
|
)
|
|
poster = factory.generate_from_content(content, layout="overlay_center", theme="ocean")
|
|
poster.save(OUTPUT_DIR / "06_content_object.png")
|
|
print(f"✓ 保存: 06_content_object.png")
|
|
|
|
# 测试7: 布局推荐
|
|
print("\n[7] 测试布局推荐...")
|
|
test_contents = [
|
|
{"emoji": "🍜", "title": "面馆"},
|
|
{"features": ["A", "B", "C", "D"], "title": "酒店"},
|
|
{"title": "攻略"},
|
|
]
|
|
for c in test_contents:
|
|
suggested = factory.suggest_layout(c)
|
|
print(f" {c.get('title', 'N/A')} → {suggested}")
|
|
|
|
# 测试8: 全主题预览
|
|
print("\n[8] 生成全主题预览...")
|
|
for theme in factory.list_themes():
|
|
poster = factory.generate(
|
|
layout="hero_bottom",
|
|
theme=theme,
|
|
title="主题预览",
|
|
subtitle=f"这是 {theme} 主题",
|
|
price="¥99"
|
|
)
|
|
poster.save(OUTPUT_DIR / f"theme_{theme}.png")
|
|
print(f"✓ theme_{theme}.png")
|
|
|
|
print("\n" + "=" * 50)
|
|
print(f"✓ 全部完成! 输出目录: {OUTPUT_DIR}")
|
|
print("=" * 50)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|