#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Vibrant海报生成使用示例 展示如何使用重构后的海报生成功能 """ import asyncio from pathlib import Path from PIL import Image # 导入算法包 from travel_algorithms import ( create_poster_pipeline, create_default_config, PosterGenerator, TextGenerator ) async def simple_vibrant_example(): """简单的Vibrant海报生成示例""" print("🎨 Vibrant海报生成示例") print("=" * 40) # 1. 创建配置(指向你的资源目录) config = create_default_config( resource_base_directory="./resource" # 你的提示词目录 ) # 2. 创建海报生成流水线 pipeline = create_poster_pipeline(config) poster_generator = pipeline["poster_generator"] text_generator = pipeline["text_generator"] # 3. 准备内容数据(也可以让AI生成) content = { "title": "正佳极地海洋世界", "slogan": "都说海洋馆是约会圣地!那锦峰夜场将是绝杀!", "price": "199", "ticket_type": "夜场票", "content_button": "套餐内容", "content_items": [ "正佳极地海洋世界夜场票1张", "有效期至2025.06.02", "多种动物表演全部免费" ], "remarks": [ "工作日可直接入园", "周末请提前1天预约" ], "tag": "#520特惠", "pagination": "1/3" } # 4. 生成海报(支持多种输出格式) # 4a. 透明底图版本 print("\n🖼️ 生成透明底图海报...") transparent_poster = await poster_generator.generate_poster( content=content, images=[], # 无底图 template_name="vibrant", use_transparent_bg=True, output_format="image" ) # 保存透明底图海报 output_dir = Path("output") output_dir.mkdir(exist_ok=True) transparent_poster.save(output_dir / "vibrant_transparent.png") print("✅ 透明底图海报已保存") # 4b. Fabric.js JSON版本(用于Web编辑器) print("\n🔧 生成Fabric.js JSON...") test_bg = Image.new("RGB", (900, 1200), (50, 100, 150)) fabric_json = await poster_generator.generate_poster( content=content, images=[test_bg], template_name="vibrant", output_format="fabric_json" ) import json with open(output_dir / "vibrant_fabric.json", 'w', encoding='utf-8') as f: json.dump(fabric_json, f, ensure_ascii=False, indent=2) print("✅ Fabric.js JSON已保存") # 4c. 分层数据版本(替代PSD) print("\n📚 生成分层数据...") layer_data = await poster_generator.generate_poster( content=content, images=[test_bg], template_name="vibrant", output_format="layers" ) print(f"✅ 生成了 {len(layer_data)} 个图层") for i, layer in enumerate(layer_data): print(f" - {layer['name']}: {layer['type']}") print("\n🎉 所有格式生成完成!") async def ai_content_generation_example(): """AI内容生成示例""" print("\n🤖 AI内容生成示例") print("=" * 40) # 创建文本生成器 config = create_default_config(resource_base_directory="./resource") pipeline = create_poster_pipeline(config) text_generator = pipeline["text_generator"] # 准备信息 scenic_info = """ 上海迪士尼乐园 - 位于上海浦东新区 - 拥有六大主题园区 - 适合全家游玩 - 有独特的中国文化元素 """ product_info = """ 一日门票套餐 - 标准票价:499元 - 包含:乐园门票1张 - 有效期:购买后6个月内 - 特色:所有游乐设施无限次 """ try: # 让AI生成Vibrant格式的内容 ai_content = await text_generator.generate_vibrant_content( scenic_info=scenic_info, product_info=product_info, tweet_info="神奇王国等你来探索!" ) print("✅ AI生成的内容:") import json print(json.dumps(ai_content, ensure_ascii=False, indent=2)) # 用AI生成的内容创建海报 config = create_default_config(resource_base_directory="./resource") pipeline = create_poster_pipeline(config) poster_generator = pipeline["poster_generator"] ai_poster = await poster_generator.generate_poster( content=ai_content, images=[], template_name="vibrant", use_transparent_bg=True, output_format="image" ) output_dir = Path("output") output_dir.mkdir(exist_ok=True) ai_poster.save(output_dir / "ai_generated_poster.png") print("✅ AI生成的海报已保存") except Exception as e: print(f"❌ AI内容生成失败: {e}") print("可能是因为没有配置AI服务或提示词文件") def show_config_example(): """展示配置示例""" print("\n⚙️ 配置示例") print("=" * 40) # 展示如何自定义配置 config = create_default_config( resource_base_directory="./resource", ai_model="gpt-4", # 可以换成其他模型 # 还可以添加更多配置... ) print("✅ 配置创建成功") print(f" - AI模型: {config.ai_model.model}") print(f" - 资源目录: {config.resources.resource_base_directory}") print(f" - 海报默认尺寸: {config.poster_generation.default_size}") print(f" - 支持的颜色主题: {list(config.poster_generation.color_themes.keys())}") async def main(): """主函数""" print("🚀 Vibrant海报生成系统使用示例") print("📖 本示例展示了重构后的海报生成功能") print("\n包含的新功能:") print(" ✨ 透明底图支持") print(" ✨ Fabric.js JSON输出") print(" ✨ 分层数据(替代PSD)") print(" ✨ AI驱动的内容生成") print(" ✨ 两栏布局设计") print(" ✨ 动态提示词加载") print("\n" + "=" * 50) # 展示配置 show_config_example() # 简单的海报生成 await simple_vibrant_example() # AI内容生成(需要AI服务配置) await ai_content_generation_example() print("\n" + "=" * 50) print("🎊 示例演示完成!") print("\n📁 生成的文件保存在 ./output/ 目录下") print("📖 查看 vibrant_fabric.json 了解Fabric.js格式") print("🎨 查看 *.png 文件了解海报效果") if __name__ == "__main__": asyncio.run(main())