from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE

# 创建演示文稿
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

def add_colored_shape(slide, left, top, width, height, color, shape_type=MSO_SHAPE.ROUNDED_RECTANGLE):
    """添加彩色形状"""
    shape = slide.shapes.add_shape(shape_type, Inches(left), Inches(top), Inches(width), Inches(height))
    shape.fill.solid()
    shape.fill.fore_color.rgb = RGBColor(*color)
    shape.line.fill.background()
    return shape

def add_text_box(slide, left, top, width, height, text, font_size=14, bold=False, color=(255,255,255), align=PP_ALIGN.LEFT):
    """添加文本框"""
    txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
    tf = txBox.text_frame
    tf.word_wrap = True
    p = tf.paragraphs[0]
    p.text = text
    p.font.size = Pt(font_size)
    p.font.bold = bold
    p.font.color.rgb = RGBColor(*color)
    p.alignment = align
    return txBox

# ========== 封面页 ==========
slide1 = prs.slides.add_slide(prs.slide_layouts[6])

bg = add_colored_shape(slide1, 0, 0, 13.333, 7.5, (15, 23, 42))
add_colored_shape(slide1, 0, 0, 0.3, 7.5, (99, 102, 241))
title_box = add_colored_shape(slide1, 1.5, 2.5, 10, 2.5, (30, 41, 68))
add_text_box(slide1, 1.8, 2.7, 9.5, 1.2, "AI文生图网站推荐", font_size=44, bold=True, color=(255,255,255), align=PP_ALIGN.CENTER)
add_text_box(slide1, 1.8, 4.0, 9.5, 0.8, "2026年国内外主流平台完整指南", font_size=24, color=(165,180,252), align=PP_ALIGN.CENTER)
add_text_box(slide1, 1.8, 6.5, 9.5, 0.5, "涵盖 Midjourney、Stable Diffusion、海艺AI、LibLib 等热门平台", font_size=14, color=(148,163,184), align=PP_ALIGN.CENTER)

# ========== 海外主流页 ==========
slide2 = prs.slides.add_slide(prs.slide_layouts[6])
bg2 = add_colored_shape(slide2, 0, 0, 13.333, 7.5, (15, 23, 42))
add_colored_shape(slide2, 0, 0, 0.3, 7.5, (59, 130, 246))
add_colored_shape(slide2, 0.3, 0.3, 12.7, 0.9, (30, 41, 68))
add_text_box(slide2, 0.5, 0.35, 12, 0.8, "海外主流文生图网站", font_size=32, bold=True, color=(255,255,255))

overseas = [
    ("Midjourney", "业内标杆，效果最惊艳", "照片级精细度，业界公认最强", (99, 102, 241)),
    ("DALL-E 3", "OpenAI出品，质量稳定", "与ChatGPT深度集成", (34, 197, 94)),
    ("Stable Diffusion", "开源免费，可控性强", "上限高，插件生态丰富", (168, 85, 247)),
    ("Adobe Firefly", "Adobe出品，商业友好", "深度集成PS/Ai设计工具", (249, 115, 22)),
    ("Ideogram", "文字渲染效果突出", "海报设计首选", (236, 72, 153)),
    ("Flux", "开源新星，发展迅猛", "社区活跃度高", (14, 165, 233)),
]

for i, (name, feature, desc, color) in enumerate(overseas):
    row = i // 2
    col = i % 2
    left = 0.5 + col * 6.4
    top = 1.5 + row * 1.9
    add_colored_shape(slide2, left, top, 6, 1.7, (30, 41, 68))
    add_colored_shape(slide2, left, top, 0.15, 1.7, color)
    add_text_box(slide2, left + 0.3, top + 0.15, 5.5, 0.5, name, font_size=20, bold=True, color=(255,255,255))
    add_text_box(slide2, left + 0.3, top + 0.65, 5.5, 0.4, feature, font_size=14, color=(165,180,252))
    add_text_box(slide2, left + 0.3, top + 1.1, 5.5, 0.4, desc, font_size=12, color=(148,163,184))

# ========== 国内主流页 ==========
slide3 = prs.slides.add_slide(prs.slide_layouts[6])
bg3 = add_colored_shape(slide3, 0, 0, 13.333, 7.5, (15, 23, 42))
add_colored_shape(slide3, 0, 0, 0.3, 7.5, (239, 68, 68))
add_colored_shape(slide3, 0.3, 0.3, 12.7, 0.9, (30, 41, 68))
add_text_box(slide3, 0.5, 0.35, 12, 0.8, "国内主流文生图网站", font_size=32, bold=True, color=(255,255,255))

domestic = [
    ("海艺AI", "80万+模型，免费额度大", "国风/二次元/写实全覆盖", (239, 68, 68)),
    ("LibLib(哩布哩布)", "SD生态最丰富", "模型资源多，社区活跃", (249, 115, 22)),
    ("吐司(Tusi.Art)", "二次元专精", "角色一致性效果好", (168, 85, 247)),
    ("奇域AI", "多模型切换", "图+视频一体化", (14, 165, 233)),
    ("通义万相", "阿里出品", "企业级API，中文理解好", (99, 102, 241)),
    ("文心一格", "百度出品", "国风/传统文化素材丰富", (34, 197, 94)),
    ("意间AI", "操作简单", "中文支持好，有免费额度", (236, 72, 153)),
    ("无界AI", "多模型切换", "有提示词广场可参考", (168, 85, 247)),
]

for i, (name, feature, desc, color) in enumerate(domestic):
    row = i // 2
    col = i % 2
    left = 0.5 + col * 6.4
    top = 1.4 + row * 1.45
    add_colored_shape(slide3, left, top, 6, 1.25, (30, 41, 68))
    add_colored_shape(slide3, left, top, 0.12, 1.25, color)
    add_text_box(slide3, left + 0.25, top + 0.1, 5.5, 0.45, name, font_size=18, bold=True, color=(255,255,255))
    add_text_box(slide3, left + 0.25, top + 0.55, 5.5, 0.35, feature, font_size=13, color=(165,180,252))
    add_text_box(slide3, left + 0.25, top + 0.9, 5.5, 0.3, desc, font_size=11, color=(148,163,184))

# ========== 选择推荐页 ==========
slide4 = prs.slides.add_slide(prs.slide_layouts[6])
bg4 = add_colored_shape(slide4, 0, 0, 13.333, 7.5, (15, 23, 42))
add_colored_shape(slide4, 0, 0, 0.3, 7.5, (168, 85, 247))
add_colored_shape(slide4, 0.3, 0.3, 12.7, 0.9, (30, 41, 68))
add_text_box(slide4, 0.5, 0.35, 12, 0.8, "如何选择适合自己的平台", font_size=32, bold=True, color=(255,255,255))

recommendations = [
    ("追求效果/专业创作", "Midjourney > Stable Diffusion > Adobe Firefly", (99, 102, 241)),
    ("国产/中文友好", "海艺AI > LibLib > 奇域AI", (239, 68, 68)),
    ("免费/高性价比", "Stable Diffusion（开源免费）\n海艺AI（国内免费额度大）", (34, 197, 94)),
    ("快速出图/简单易用", "Canva AI > 意间AI > 文心一格", (249, 115, 22)),
]

for i, (title, content, color) in enumerate(recommendations):
    top = 1.5 + i * 1.45
    add_colored_shape(slide4, 0.5, top, 12.3, 1.25, (30, 41, 68))
    add_colored_shape(slide4, 0.5, top, 0.15, 1.25, color)
    add_text_box(slide4, 0.85, top + 0.15, 4, 0.5, title, font_size=20, bold=True, color=(255,255,255))
    add_text_box(slide4, 5, top + 0.2, 7.5, 0.9, content, font_size=16, color=(165,180,252))

output_path = '/var/www/html/share/AI文生图网站推荐.pptx'
prs.save(output_path)
print(f"PPT已生成: {output_path}")
