图片转 PPT 怎么做:从一张图到可编辑幻灯片的完整链路

更新于

图片转 PPT 的全过程:模型如何拆解截图、任务怎么排队、原生 PPTX 怎么导出,每一步都写清楚。

对应版本:2026-10-12

图片转 PPT 的第一版打通了主流程:上传一张幻灯片图片,多模态模型把画面拆成一份只含数据的元素描述(DrawScript),用户逐个确认元素后,导出一份由原生形状组成、能在 PowerPoint 里直接编辑的 PPTX。

从截图到可编辑PPT的完整流程
教学示意图 · 从截图到可编辑PPT的完整流程

出发点

用户手里往往只有一张幻灯片截图,要的不是把图片塞进 PPT,而是图片转幻灯片:标题、色块、连线都能单独选中、改字、改色。我们的做法是让多模态模型看图,说清画面里有什么、在哪、长什么样,再由本地程序把这份描述画成原生形状。

第一版的三条基本取舍都从这里来:

  • 模型只负责描述,不生成文件。它输出一份 JSON 描述,PPTX 文件完全由本地引擎生成。
  • 模型输出只能是数据。图片、网址、base64、XML、代码一律不收。这样导出结果始终是可编辑的形状,而不是贴图;服务端也不会因为模型的输出去执行代码或访问外部地址。
  • 人来把关。模型输出可能有偏差,所以导出前每个元素都要经过用户确认。

DrawScript:只有数据的中间格式

DrawScript 记录画布宽高、可选的背景色和一组元素。坐标统一使用原图像素,元素按先后顺序叠放,后画的盖在先画的上面。这一版支持六种元素:

元素 可设置的内容
文字 文字内容、字号、粗体、斜体、颜色、对齐、字体
矩形 填充、边框颜色与线宽、圆角、虚线
椭圆 填充、边框
直线 颜色、线宽、虚线、箭头
折线 至少两个点,箭头加在最后一段
多边形 至少三个点,用于近似复杂图形

每种元素能用哪些属性都有明确清单,清单外的属性直接报错。这一版还没有图标、表格和图片;遇到图标类元素时宁可报错,也不悄悄用一个椭圆顶替。

DrawScript 是公开的格式,除了由模型生成,也可以通过「导入 DrawScript」导入一份 JSON,替换当前脚本。导入的脚本和模型输出走同一套校验,导入后所有元素都是待确认。用其他工具离线生成的脚本,也能接进同一条审阅和导出流程。

幻灯片元素与DrawScript对应关系
教学示意图 · 幻灯片元素与DrawScript对应关系

数据边界由程序守住

“只要数据”不能只靠提示词约定,模型输出写入任务之前要经过三层校验:

  • 结构:只认识约定的字段;脚本里嵌入或引用原图位图直接拒绝;元素类型必须在白名单内,坐标必须是数字,个数符合元素类型。
  • 语义:每种元素的属性按清单检查;颜色格式、字号、线宽、虚线样式都有取值范围。单页最多 2048 个元素,单个多边形最多 4096 个点,单段文字最多 4000 字。
  • 一致性:元素编号不能重复,缺省时自动编号;脚本的宽高必须和原图一致。

超出画布的坐标不判错,而是收回画布内,并在页面上以「编译提示」列出。

经过这几层校验,脚本里能自由填写的只剩文字内容、元素名和字体名。即使模型把一个网址写进文字里,它也只会作为一段文字出现,不会被访问,也不会变成图片。拆解、导入、手动修改、对话修改、排版,所有写入都经过同一套校验,没有绕开的路径。校验后的几何就是导出时使用的几何,用户审阅时看到的位置和导出结果一致。

模型描述的三层校验
教学示意图 · 模型描述的三层校验

拆解

图片转 PPT 的成败基本由拆解决定。点「自动拆解」后,模型的输出逐段显示在「大模型输出过程」窗口里,完成后页面刷新为校验过的结果。服务同时最多处理 2 个模型调用,单次拆解最长等待 5 分钟。拆解失败时,任务标记为失败并显示原因,可以重新拆解。

审阅与确认

  • 每个元素单独确认,全部确认后才能排版和导出。这条限制由服务端执行,不只是按钮置灰。
  • 修改某个元素的参数,只撤销这个元素的确认;删除元素会清空全部确认,因为整体构图变了。页面上至少保留一个元素。
  • 排版提供「网格排版」「居中排版」「左对齐」三种。网格放不下时直接提示,不会悄悄缩放元素。
  • 对话修改:选中一个元素,用一句话说明要怎么改,模型只返回这一个元素的新描述,结果同样经过校验,改完回到待确认。这条路后来在第 05 章扩展为完整的 imageToEditablePPT-Agent。

模型与密钥

模型由用户自己提供(BYOK)。在「多模态模型设置」里选择提供方、填写 API Key 和模型名,也可以接入自定义的兼容接口;还可以通过环境变量配置,页面上的配置优先。列表里只出现能读图的提供方。没有配置模型时,拆解会提示先完成配置。

用户可以依赖的几点:

  • 密钥只保存在本机服务端,浏览器只知道“是否已配置”,拿不到密钥本身。
  • 错误信息里如果带出了密钥,会先被替换掉再返回。
  • 服务只接受来自本机的访问,并拒绝其他网站发起的跨站请求,别的网页无法借用户的浏览器调用这个本地服务。

并发保护

每个任务带一个修订号,每次修改都要基于最新的修订号;一个操作进行中时,其他修改会被拒绝。用户双击按钮、开了两个标签页,或者在模型返回之前又改了别的内容,后到的请求都会被拦下并提示刷新后重试,任务状态不会被写乱。

这一版的任务保存在服务进程的内存中,最多同时保留 12 个,闲置超过 1 小时后清理。

导出:原生形状

  • 页面尺寸按原图像素以 96 DPI 换算,字号和线宽按同一比例换算。
  • 背景色设为真正的幻灯片背景。
  • 文字导出为文本框,不自动换行、不自动缩放字号。
  • 矩形(含圆角矩形)、椭圆、直线(含箭头)、折线、多边形都导出为原生形状,多边形使用自定义路径。
  • 元素名会写进 PowerPoint 的选择窗格,方便在 PowerPoint 里继续查找和编辑。
  • 导出过程不联网、不解码图片、不接收外部 XML。原图只作为模型的参考输入,不会出现在导出文件里。

改进

为了让模型输出的小偏差不至于让整份结果作废,我们在严格校验之外做了几处有限的容错:

  • 同一属性的常见不同写法(例如箭头、多边形填充色)都能识别。
  • 模型输出外面包着 Markdown 代码块,或单元素修改的结果多包了一层,会自动剥离;字段本身仍然严格校验。
  • 坐标略超出画布时收回画布内并给出提示,不拒绝整份脚本。

上述校验规则和从上传、拆解、确认、排版到导出的完整流程都有自动化测试覆盖。

这一版的边界

  • 质量依靠人工核对:没有自动检查遗漏元素和位置偏差,拆解过程中画布要等模型输出完整后才显示。第 02 章加入了完整性检查、实时预览和视觉复检。
  • 校验对整份脚本生效,只要有一个元素不合规,整次拆解就会失败,需要重新拆解。第 02 章起会忽略空文本的占位元素,第 03 章起拆解失败会自动重试。
  • 模型配置和任务只保存在内存中,服务重启后需要重新填写配置、重新上传图片。第 02 章起两者都会保存在本机并在重启后恢复。
  • 表达能力有限:没有图标、表格和图片,复杂插画只能用多边形近似。第 03 章加入了图标和表格,第 07 章加入了从原图抠图。

下一章在这条流程上加入了自动的质量闭环:拆解后的完整性自检、边流边画的实时预览,以及截图对照原图的视觉复检。

图片转幻灯片