UNPKG

article-writer-cn

Version:

AI 驱动的智能写作系统 - 专注公众号/自媒体文章创作

954 lines (756 loc) 30.4 kB
# 配图系统 ## 功能说明 基于文章内容,**自动完成配图流程**: ### 阶段1: 配图需求分析 ⭐ - 分析 draft.md 确定配图位置 - 根据工作区要求确定配图数量 - 生成配图清单和优先级 ### 阶段2: 图片获取 ⭐ - 优先级1: 搜索公共领域资源(Wikimedia/GitHub/官网) - 优先级2: 提供AI生成prompt(可选) - 优先级3: 推荐免费图库(Unsplash/Pexels) ### 阶段3: Markdown插入 ⭐ - 在draft.md中插入图片引用 - 添加图片说明和来源标注 - 生成images/README.md清单 **重要**: 这不只是"建议",而是**自动执行**完成配图 ## 工作区配图要求 ### 公众号工作区 (wechat) - **配图数量**: 5-8 张 (**必须完成**) - **尺寸要求**: 900×500px (封面), 720px宽度 (插图) - **格式**: PNG/JPG - **质量**: 清晰度 > 72dpi ### 视频工作区 (video) - **配图数量**: 不需要 (脚本有分镜标注即可) - 如需要,可提供分镜设计建议 ### 通用工作区 (general) - **配图数量**: 可选 (根据用户brief决定) - **尺寸**: 根据发布平台调整 ## 配图类型 ### 1. 封面图(必需) **建议格式:** - 公众号: 900×500px 或 2:1 比例 - 知乎: 1200×675px 或 16:9 比例 **设计建议:** ``` 封面图方案 A: 对比式 ━━━━━━━━━━━━━━━━━━━ 左侧: Claude Code logo/界面截图 中间: VS 文字 右侧: Cursor logo/界面截图 背景: 渐变色(蓝紫色系) 标题: "Claude Code vs Cursor: 真实场景对比" 生成工具建议: Canva, Figma, 或 Midjourney ``` ### 2. 文章插图(建议3-5张) **插图1: 测试场景示意图** ``` 类型: 流程图/示意图 内容: 5个测试场景的icon展示 位置: 引言后 工具: draw.io, excalidraw ``` **插图2-4: 真实截图** ``` 类型: 产品截图(带标注) 内容: Claude Code 和 Cursor 的实际使用界面 关键: 标注重点功能,添加箭头说明 工具: 截图 + Snagit/Skitch 标注 ``` ### 3. 数据图表(如有数据) **图表1: 响应时间对比** ``` 类型: 柱状图 数据: - Claude Code: 2.8秒 - Cursor: 1.2秒 工具: Excel, Numbers, 或代码生成(Python matplotlib) ``` ## 执行流程 ### 步骤1: 读取draft.md和工作区配置 **AI操作**: ``` 1. Read workspaces/*/articles/001-*/draft.md 2. Read .content/memory/current-workspace.json # 获取工作区类型 3. Read spec/presets/workspaces/*.md # 获取配图要求 ``` **输出**: ``` 📋 项目信息: - 文章: workspaces/wechat/articles/001-claude-code/draft.md - 工作区: 公众号 (wechat) - 配图要求: 5-8 张 (必须完成) - 文章字数: 3200字 ``` ### 步骤2: 分析配图需求 **分析维度**: 1. **段落分析**: 每 500-800 字插入一张图 2. **内容类型**: 识别需要配图的内容(数据/对比/概念/截图) 3. **优先级**: P0(必须) > P1(建议) > P2(可选) **输出示例**: ``` 📸 配图需求分析 (共7张) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 配图1: 封面图 [P0 必须] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 位置: 文章开头 类型: 设计图 内容: Claude Code vs Cursor 对比主视觉 尺寸: 900×500px 来源: AI生成 或 Canva设计 文件名: 00-cover.png ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 配图2: 产品界面对比 [P0 必须] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 位置: 第1部分后 (约300字处) 类型: 产品截图 内容: Claude Code 和 Cursor 的主界面 建议: 截图 + 标注重点区域 文件名: 01-interface-comparison.png ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 配图3: 响应速度对比图表 [P1 建议] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 位置: 性能对比部分 (约900字处) 类型: 柱状图 数据: Claude Code 2.8s vs Cursor 1.2s 工具: Excel/Numbers 或 Python matplotlib 文件名: 02-performance-chart.png [...其他配图...] ``` ### 步骤3: 搜索并下载公共资源 ⭐ 多重下载策略 **图片来源优先级**: 1. ⭐⭐⭐ **官方资源** (GitHub/官网) - 最优先,自动下载 2. ⭐⭐ **公共领域** (Wikimedia Commons) - 免费无版权,自动下载 3. ⭐ **免费图库** (Unsplash/Pexels) - 需标注来源,自动下载 **下载策略(多重 Fallback)**: ``` 策略1: axios 直接下载 (默认,快速) ↓ 失败 (403/401/超时) 策略2: Playwright MCP 浏览器下载 (处理反爬虫) ↓ 失败 或 无 Playwright 策略3: AI 生成 SVG 替代图 (保证配图完整性) ``` **AI操作流程**: #### 3.1 搜索图片URL ``` WebSearch: "Claude Code screenshot site:github.com OR site:anthropic.com" WebSearch: "Cursor IDE interface site:cursor.sh OR site:github.com" WebSearch: "programming comparison site:commons.wikimedia.org" ``` #### 3.2 提取真实图片链接 ``` WebFetch: 提取的页面 URL → 找到 <img src="..."> 或 <a href="...jpg/png"> → 获取原图链接(非缩略图) ``` #### 3.3 验证图片可访问性 ```typescript // 使用 image-downloader.ts 模块 import { getImageInfo } from '../utils/image-downloader.js'; const info = await getImageInfo(imageUrl); if (info && info.size > 0) { // 可下载 } ``` #### 3.4 自动下载图片 (多重策略) **策略1: axios 直接下载 (默认)** ```typescript import { downloadImages } from '../utils/image-downloader.js'; const tasks = [ { url: 'https://commons.wikimedia.org/...', savePath: 'workspaces/wechat/articles/001-*/images/01-interface.png' }, // ... 更多 ]; const results = await downloadImages(tasks, 5, true); // 并发5个,显示进度 ``` **策略2: Playwright MCP 浏览器下载 (处理反爬虫)** 如果 axios 下载失败(403/401),自动检测 Playwright MCP: ```typescript // 检测 Playwright MCP 是否可用 const hasPlaywright = tools.some(t => t.name.startsWith('mcp__playwright__')); if (hasPlaywright && result.needsPlaywright) { // 使用 Playwright 下载 // 1. 导航到页面 mcp__playwright__browser_navigate({ url: imageUrl }); // 2. 等待图片加载 mcp__playwright__browser_wait_for({ time: 2 }); // 3. 截图保存 mcp__playwright__browser_take_screenshot({ element: "image element", ref: "img-ref-from-snapshot", filename: savePath, type: "png" }); // 或者下载文件(如果是直接链接) // evaluate script 下载文件 } ``` **策略3: AI 生成 SVG 替代图 (终极 Fallback)** 如果下载和 Playwright 都失败,**根据上下文动态生成 SVG**: **AI 操作流程**: 1. **分析图片上下文** - 读取 draft.md 中图片所在段落 - 理解这张图片要表达什么内容 - 提取关键信息(标题、对比项、数据等) 2. **设计 SVG 内容** - 根据内容类型选择合适的可视化方式 - 界面对比 → 分屏对比图 - 数据对比 → 柱状图/折线图 - 流程说明 → 流程图/示意图 - 架构图 → 方框图/连线图 3. **生成 SVG 代码** (AI 动态生成) **AI 执行步骤**: a) **从 draft.md 读取图片所在段落** ``` 示例段落内容: "测试显示,Claude Code 的响应时间为 2.8秒,而 Cursor 仅需 1.2秒。 在代码补全场景下,Cursor 的速度优势更加明显。" ``` b) **AI 分析并提取关键信息** - 识别类型: "响应时间" + 数字 → 性能对比图(柱状图) - 提取数据: Claude Code=2.8秒, Cursor=1.2秒 - 提取主体: 两个产品名称 - 推断品牌色: Claude(紫色系), Cursor(蓝色系) c) **AI 自主决定 SVG 结构** - 选择图表类型: 柱状图(因为是性能对比) - 计算尺寸: 根据数值范围自动计算柱高 - 设计布局: 左右对比或上下对比 - 添加标注: 数值、单位、标题 d) **AI 生成完整 SVG 代码** - 使用 XML/SVG 语法 - 包含: 标题、图表主体、图例、数据标注 - 添加底部说明: "AI生成可视化" - 保持简洁美观,符合文章风格 e) **使用 Write 工具保存** ```typescript // AI 自己决定如何生成 SVG 内容 // 不使用固定模板,完全基于上下文 Write('images/02-performance-comparison.svg', svgContent); ``` **重要原则**: - ❌ 不使用固定的 SVG 模板 - ✅ 每次都根据实际内容重新设计 - ✅ 提取的数据决定图表样式和尺寸 - ✅ 保持与文章内容的一致性 4. **更新 Markdown 引用** ```markdown ![响应时间对比](images/02-performance-comparison.svg) *图2: Claude Code vs Cursor 响应时间对比 (AI 生成可视化)* ``` **SVG 生成决策指南** (AI 如何选择): AI 需要根据 draft.md 的上下文,自主决定生成什么类型的 SVG: | 上下文特征 | 推荐 SVG 类型 | AI 应该提取的信息 | 生成要点 | |----------|------------|----------------|---------| | 出现"A vs B""对比""相比" | 分屏对比图 | 两个主体名称、各自特点 | 左右或上下布局,使用不同颜色区分 | | 包含具体数字(如"2.8秒""30%") | 柱状图/折线图 | 数值、单位、对比项 | 根据数值范围自动计算柱高/折线点 | | 出现"步骤""流程""然后""接着" | 流程图/步骤图 | 步骤顺序、每步说明 | 箭头连接,编号标识,垂直或水平布局 | | 出现"架构""组成""模块""层次" | 方框连线图 | 模块名称、层级关系 | 矩形框+连接线,体现层次或关系 | | 列举多个"功能""特性"、有✓/✗标记 | 特性对比表格 | 功能名称、是否支持 | 表格形式,√/×符号,清晰对齐 | | 出现"如果...那么""选择""判断" | 决策树/流程图 | 判断条件、分支结果 | 菱形(判断)+矩形(结果),箭头连接 | **AI 生成原则**: 1. **读取上下文** - Read draft.md,定位到需要配图的段落 - 阅读前后 200-300 字的内容 - 理解这段内容的核心要表达什么 2. **智能提取信息** ``` 示例段落: "经过测试,Claude Code 在代码理解方面得分 85 分,而 Cursor 为 78 分。 但在响应速度上,Cursor 以 1.2 秒的成绩领先于 Claude 的 2.8 秒。" AI 应该提取: - 对比项: 代码理解(Claude:85, Cursor:78)、响应速度(Claude:2.8s, Cursor:1.2s) - 图表类型: 多维度对比 → 雷达图 或 分组柱状图 - 品牌色: Claude(紫色#7C3AED), Cursor(蓝色#3B82F6) - 标题: "Claude Code vs Cursor 性能对比" ``` 3. **自主设计可视化** - 根据数据数量选择合适的图表 - 2-3个数据点 → 柱状图 - 4-6个维度 → 雷达图 - 时间序列 → 折线图 - 层级关系 → 树状图/组织图 4. **动态生成 SVG** - 不使用固定模板,每次重新计算布局 - 数值决定图形尺寸(如柱高 = 数值 × 比例系数) - 自动调整文字位置避免重叠 - 添加合适的图例和标注 5. **保持一致性** - 从文章中识别品牌色(如提到的产品logo颜色) - 字体风格与文章整体一致 - 尺寸符合工作区要求(如公众号 720px 宽) **AI 生成 SVG 的优势**: - ✅ 100% 成功率 (无需外部资源) - ✅ 矢量图,任意缩放,体积小 (< 10KB) - ✅ 保持文章配图完整性 - ✅ **根据上下文动态生成**,内容精准匹配 - ✅ 可后续替换为真实截图/设计图 - ⚠️ 仅作为 fallback,优先使用真实图片 **重要**: - SVG 内容完全基于 draft.md 上下文生成 - 不使用固定模板,每张图都是定制的 - 标注 "AI生成可视化" 以区分真实截图 **输出示例** (展示多重策略): ``` 🔍 公共资源搜索与下载: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 搜索结果 (5张): ✅ Claude Code 官方截图 来源: https://github.com/anthropics/claude-code/raw/main/screenshot.png 许可: MIT License ✓ ✅ Cursor 界面图 来源: https://cursor.sh/assets/interface.png 许可: Press Kit (可使用) ✓ ⚠️ 对比示意图 (受保护) 来源: https://example.com/protected-image.png 状态: 403 Forbidden → 将使用 Playwright 重试 ✅ 性能图表 来源: 自己生成 (Python matplotlib) ❌ 功能对比表 (无公共资源) 状态: 未找到 → 将生成 SVG 占位图 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 下载进度: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [策略1: axios 直接下载] [✓] 01-claude-interface.png (245KB) - 成功 [✓] 02-cursor-interface.png (198KB) - 成功 [✗] 03-comparison.png (403 Forbidden) - 失败 [✓] 04-performance-chart.png (157KB) - 成功 [策略2: Playwright MCP 浏览器下载] ✓ Playwright MCP 已检测 [✓] 03-comparison.png (189KB) - 成功 (Playwright) [策略3: AI 生成 SVG 占位图] [✓] 05-feature-table.svg (8KB) - 已生成 类型: 功能对比表 (AI生成占位图) 尺寸: 800×600px ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ 下载完成: 5/5 成功 - axios 直接下载: 3张 - Playwright 下载: 1张 - SVG 占位图: 1张 📁 保存位置: workspaces/wechat/articles/001-*/images/ 💡 提示: - 1张图片使用了 Playwright MCP (处理反爬虫) - 1张图片生成了 SVG 占位图 (可后续替换真实截图) ``` ### 步骤4: 提供AI生成prompt (可选) **如果公共资源不足,提供AI生成prompt**: ``` 🎨 AI生成建议 (可选) 图片1: 封面图 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Midjourney Prompt: "Split screen comparison, left side Claude AI interface with purple theme, right side Cursor IDE interface with blue theme, VS text in center, modern tech style, clean minimal design, 16:9 aspect ratio --ar 16:9 --v 6" 或 Stable Diffusion Prompt: "software interface comparison, split screen design, modern UI, purple and blue color scheme, clean minimal style, high quality" 图片3: 性能图表 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Python代码生成: ```python import matplotlib.pyplot as plt tools = ['Claude Code', 'Cursor'] response_time = [2.8, 1.2] plt.bar(tools, response_time, color=['#7C3AED', '#3B82F6']) plt.ylabel('Response Time (seconds)') plt.title('Performance Comparison') plt.savefig('02-performance-chart.png', dpi=150) ``` ``` ### 步骤5: 验证下载并插入 Markdown 引用 ⭐ 智能插入 **AI操作**: 1. ✅ 检查下载结果 - 只为成功下载的图片插入引用 2. ✅ 在 draft.md 的合适位置插入图片引用 3. ✅ 添加图片说明和来源标注 4. ⚠️ 失败的图片标注 `<!-- 待补充: ... -->` **插入逻辑**: ```typescript import { DownloadResult } from '../utils/image-downloader.js'; // 只插入成功下载的图片 const successfulImages = results.filter(r => r.success); for (const img of successfulImages) { const relativePath = `images/${path.basename(img.savePath)}`; const markdown = `\n\n![图片说明](${relativePath})\n*来源: ${img.url}*\n`; // 在适当位置插入 draft.md // ... } // 失败的图片添加占位符注释 const failedImages = results.filter(r => !r.success); for (const img of failedImages) { const comment = `\n<!-- ⚠️ 图片待补充: ${path.basename(img.savePath)} -->\n<!-- 原因: ${img.error} -->\n<!-- 请手动下载: ${img.url} -->\n`; // ... } ``` **插入前 (draft.md)**: ```markdown ## 性能对比 测试显示,Claude Code的响应时间为2.8秒,而Cursor仅需1.2秒。 接下来我们看代码理解能力... ``` **插入后 (draft.md) - 成功下载**: ```markdown ## 性能对比 测试显示,Claude Code的响应时间为2.8秒,而Cursor仅需1.2秒。 ![响应速度对比](images/02-performance-chart.png) *图2: Claude Code vs Cursor 响应速度对比 (数据基于实测)* *来源: 自己生成 (Python matplotlib)* 接下来我们看代码理解能力... ``` **插入后 (draft.md) - 下载失败**: ```markdown ## 产品界面 两款产品的界面设计各有特色。 <!-- ⚠️ 图片待补充: 03-interface-comparison.png --> <!-- 原因: 403 Forbidden --> <!-- 请手动下载: https://example.com/screenshot.png --> <!-- 或使用自己的截图 --> Claude Code 采用了... ``` ### 步骤6: 生成图片清单和下载日志 ⭐ 自动生成 **创建 images/README.md**: ```markdown # 配图清单 - [项目名] > 生成时间: 2025-10-26 > 总数: 7 张 | 已下载: 4 张 | 待补充: 3 张 ## 已下载图片 ✅ ### 01-claude-interface.png (Claude Code 界面) - **类型**: 产品截图 - **尺寸**: 1920×1080px (245KB) - **来源**: https://github.com/anthropics/claude-code/raw/main/screenshot.png - **许可**: MIT License - **状态**: ✅ 已下载 - **位置**: draft.md 第1部分后 ### 02-cursor-interface.png (Cursor 界面) - **类型**: 产品截图 - **尺寸**: 1600×900px (198KB) - **来源**: https://cursor.sh/assets/interface.png - **许可**: Press Kit (可使用) - **状态**: ✅ 已下载 - **位置**: draft.md 第2部分后 ### 03-comparison.svg (对比示意图) - **类型**: 矢量图 - **尺寸**: SVG (87KB) - **来源**: https://commons.wikimedia.org/wiki/File:Comparison.svg - **许可**: CC0 Public Domain - **状态**: ✅ 已下载 - **位置**: draft.md 引言后 ### 04-performance-chart.png (性能图表) - **类型**: 数据图表 - **尺寸**: 800×600px (自己生成) - **来源**: Python matplotlib (代码已提供) - **状态**: ✅ 已生成 - **位置**: draft.md 性能对比部分 ## 待补充图片 ⚠️ ### 00-cover.png (封面图) [P0 必须] - **类型**: 设计图 - **尺寸**: 900×500px - **状态**: ⏳ 待AI生成 - **方法**: Midjourney prompt 已提供 (见下方) - **位置**: 文章开头 ### 05-feature-table.png (功能对比表) [P1 建议] - **类型**: 表格截图 - **尺寸**: 1200×800px - **状态**: ⏳ 待制作 - **方法**: Excel/Numbers 制作后截图 - **位置**: draft.md 功能对比部分 ### 06-decision-tree.png (选择决策树) [P2 可选] - **类型**: 流程图 - **尺寸**: 800×600px - **状态**: ⏳ 待制作 - **方法**: draw.io / excalidraw - **位置**: draft.md 结论部分 ## 下载失败图片 ❌ _无下载失败的图片_ (如有失败,会在此列出原因和替代方案) ## 制作优先级 - ✅ **已完成** (4张): Claude界面, Cursor界面, 对比图, 性能图表 - ⏳ **P0 必须** (1张): 封面图 - AI生成 - ⏳ **P1 建议** (1张): 功能对比表 - 手动制作 - ⏳ **P2 可选** (1张): 决策树 - 可选 ## 下一步行动 1. [ ] 使用 Midjourney 生成封面图 (prompt 已提供) 2. [ ] 制作功能对比表 (Excel/Numbers) 3. [ ] (可选) 绘制决策树 (draw.io) 4. [ ] 将生成的图片放入 images/ 目录 5. [ ] draft.md 中的图片引用已自动插入 ✅ ## AI生成 Prompt (封面图) **Midjourney**: ``` Split screen comparison, left side Claude AI interface with purple theme, right side Cursor IDE interface with blue theme, VS text in center, modern tech style, clean minimal design, 16:9 aspect ratio --ar 16:9 --v 6 ``` **Stable Diffusion**: ``` software interface comparison, split screen design, modern UI, purple and blue color scheme, clean minimal style, high quality ``` ``` **同时创建 images/download-log.json**: ```json { "timestamp": "2025-10-26T10:30:00.000Z", "total": 7, "success": 4, "failed": 0, "pending": 3, "results": [ { "fileName": "01-claude-interface.png", "url": "https://github.com/anthropics/claude-code/raw/main/screenshot.png", "success": true, "size": 250880, "format": "png" }, { "fileName": "02-cursor-interface.png", "url": "https://cursor.sh/assets/interface.png", "success": true, "size": 202752, "format": "png" }, { "fileName": "03-comparison.svg", "url": "https://commons.wikimedia.org/wiki/File:Comparison.svg", "success": true, "size": 89088, "format": "svg" }, { "fileName": "04-performance-chart.png", "success": true, "size": 156672, "format": "png", "source": "自己生成" }, { "fileName": "00-cover.png", "success": false, "pending": true, "reason": "需要AI生成" }, { "fileName": "05-feature-table.png", "success": false, "pending": true, "reason": "需要手动制作" }, { "fileName": "06-decision-tree.png", "success": false, "pending": true, "reason": "需要手动绘制" } ] } ``` ## 输出格式 **保存文件**: `workspaces/*/articles/001-*/images-plan.md` ```markdown # 配图方案 - [项目名] ## 封面图 **方案**: 对比式设计 **尺寸**: 900×500px (公众号) / 1200×675px (知乎) **设计元素**: - 左: Claude Code logo - 右: Cursor logo - 中: VS文字 - 背景: 渐变蓝紫 **文字**: "Claude Code vs Cursor: 5个真实场景深度对比" **工具**: Canva模板 或 Midjourney生成 ## 插图清单 ### 插图1: 测试场景总览 **位置**: 引言后 **类型**: 示意图 **内容**: 5个场景icon (重构/开发/修复/审查/文档) **工具**: draw.io ### 插图2: Claude Code 使用截图 **位置**: 场景1 **类型**: 产品截图+标注 **内容**: 展示代码理解能力 **要点**: 标注AI的理解提示 [...更多插图...] ## 图表清单 ### 图表1: 响应时间对比 **位置**: 场景1后 **类型**: 柱状图 **数据**: Claude 2.8s vs Cursor 1.2s ## 制作优先级 - P0 (必须): 封面图 - P1 (建议): 插图2-4 (真实截图) - P2 (可选): 图表1-2, 插图1 ## 下一步 - [ ] 制作封面图 - [ ] 截取产品使用截图 - [ ] 生成数据图表(如有) - [ ] 将图片放入 images/ 目录 - [ ] 在 draft.md 中标注图片位置 ``` ## 多重下载策略流程图 ``` 开始配图流程 ↓ 分析配图需求 (步骤2) ↓ 搜索公共资源 (WebSearch/WebFetch) ↓ ┌─────────────────────────────────────┐ │ 策略1: axios 直接下载 (优先) │ │ - 公共领域: Wikimedia Commons │ │ - 官方资源: GitHub/官网 │ │ - 免费图库: Unsplash/Pexels │ └─────────────────────────────────────┘ ↓ 成功? ──YES──→ 保存图片 ────┐ │ │ NO (403/401/超时) │ ↓ │ ┌─────────────────────────────────────┐ │ 策略2: Playwright MCP 浏览器下载 │ │ - 检测 Playwright MCP 是否安装 │ │ - 使用浏览器访问受保护的图片 │ │ - 截图或下载文件 │ └─────────────────────────────────────┘ ↓ │ 成功? ──YES──→ 保存图片 ────┤ │ │ NO (无Playwright或仍失败) │ ↓ │ ┌─────────────────────────────────────┐ │ 策略3: AI 生成 SVG 占位图 (兜底) │ │ - 根据图片类型生成对应 SVG │ │ - 保持配图完整性 │ │ - 标注"AI生成占位图" │ │ - 后续可替换真实图片 │ └─────────────────────────────────────┘ ↓ │ 生成 SVG ────────────────────┤ ↓ │ ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ↓ 插入 Markdown 引用 (步骤5) ↓ 生成清单和日志 (步骤6) ↓ 完成 ``` ## 注意事项 ### 1. 版权合规 - ✅ 使用自己截图,不要盗用他人图片 - ✅ 公共领域优先 (CC0/Public Domain) - ✅ 官方资源需确认许可 (MIT/Apache/Press Kit) - ⚠️ 标注图片来源和许可证 ### 2. 清晰度要求 - 截图使用 2x Retina 分辨率 - 压缩前保持原始质量 - 公众号封面: ≥ 900×500px - 插图: ≥ 720px 宽度 ### 3. 标注和说明 - 关键功能用箭头和文字标注 - 添加图片说明文字 (Caption) - 复杂图表需要图例 (Legend) - SVG 占位图明确标注 "AI生成" ### 4. 一致性 - 配图风格保持统一 - 颜色主题一致 - 字体和排版统一 - 图标风格协调 ### 5. Playwright MCP 使用建议 - 首次使用会自动安装 Chromium (~200MB) - 仅在 axios 失败时使用 (节省资源) - 适用于需要登录或有反爬虫的网站 - 下载速度比 axios 慢,但成功率更高 ### 6. SVG 占位图最佳实践 - 保持简洁,突出关键信息 - 使用品牌色彩 (如有) - 明确标注 "AI生成占位图" - 提供替换指引 (images/README.md) - 尺寸与真实图片一致 ## 最终输出示例 ⭐ 自动下载完成 ``` ✅ 配图系统执行完成 - 已自动下载公共资源图片 📋 执行总结: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 工作区: 公众号 (wechat) - 配图要求: 5-8 张 - 总计规划: 7 张 (P0:2张, P1:3张, P2:2张) - 已自动下载: 4 张 (公共资源 + 自己生成) - 待补充: 3 张 (AI生成1张, 手动制作2张) - 文章字数: 3200字 - 平均间隔: 约450字/图 📄 生成的文件: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ workspaces/wechat/articles/001-*/images-plan.md - 配图方案 ✅ workspaces/wechat/articles/001-*/images/README.md - 图片清单(含下载状态) ✅ workspaces/wechat/articles/001-*/images/download-log.json - 下载日志 ✅ workspaces/wechat/articles/001-*/draft.md - 已插入图片引用 📸 图片下载结果 (多重策略): ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ 已获取 (6张): [策略1-axios] 01-claude-interface.png (245KB, GitHub官方) [策略1-axios] 02-cursor-interface.png (198KB, Cursor官网) [策略2-Playwright] 03-comparison.png (189KB, 受保护资源) [策略1-axios] 04-performance-chart.png (157KB, 自己生成) [策略3-SVG] 05-feature-table.svg (8KB, AI生成占位图) [策略3-SVG] 06-code-example.svg (12KB, AI生成占位图) ⏳ 待补充 (1张): [⏳] 00-cover.png (AI生成 - Midjourney prompt已提供) 📊 策略统计: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✓ axios 直接下载: 3张 (75% 成功率) ✓ Playwright MCP: 1张 (处理反爬虫) ✓ SVG 占位图: 2张 (保证配图完整) ⏳ 待手动补充: 1张 (封面图) 💡 Playwright 使用情况: - 检测状态: ✓ 已安装 - 使用次数: 1次 - 成功率: 100% - 适用场景: 403 Forbidden 资源 🔍 图片来源: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ 自动下载成功: 4 张 - 官方资源: 2 张 (GitHub + 官网) - 公共领域: 1 张 (Wikimedia Commons) - 自己生成: 1 张 (Python matplotlib) ⏳ 待手动补充: 3 张 - AI生成: 1 张 (Midjourney prompt已提供) - 手动制作: 2 张 (制作指南已提供) 💡 draft.md 更新情况: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ 已自动插入: 4 个图片引用 (成功下载的图片) ⏳ 已添加占位注释: 3 处 (待补充的图片,含下载/制作指引) 📦 下载详情: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 下载日志: images/download-log.json - 总下载大小: 687KB - 下载耗时: 约 12 秒 - 并发数: 5 - 重试次数: 0 (所有下载一次成功) 💡 下一步行动: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. ✅ 公共资源图片 - 已自动下载完成 2. ⏳ 封面图 - 使用提供的 Midjourney prompt 生成 3. ⏳ 功能对比表 - 使用 Excel/Numbers 制作 4. ⏳ 决策树 - 使用 draw.io / excalidraw 绘制 (可选) 5. 将补充的图片保存到 images/ 目录 6. draft.md 中的引用无需修改 ✅ 7. /check - 最终检查 ⚠️ 重要提醒: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - ✅ 已下载图片的引用已自动插入 draft.md - ⏳ 待补充图片的位置已标注 HTML 注释 (<!-- 图片待补充 -->) - 图片文件名不要修改 (与Markdown引用对应) - 确保补充的图片尺寸符合要求: * 封面: 900×500px (公众号) 或 1200×675px (知乎) * 插图: 720px 宽度 - 版权合规: ✅ 已下载图片均为合法来源 * GitHub官方: MIT License * 官网Press Kit: 可使用 * Wikimedia Commons: CC0 Public Domain 📄 查看详情: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 完整配图清单: images/README.md - 下载日志详情: images/download-log.json - 配图方案文档: images-plan.md ```