用代码生成PPT:三层架构实现自动化排版与批量生成

1. 从零搭建一个"PPT大师":为什么我要自己造这个轮子

做技术分享、写项目复盘、给团队做培训,绕不开的一件事就是做PPT。我算了一下,过去一年我大概做了四十多份演示文稿,平均每份二十页起步。最开始我用的就是最朴素的办法——打开软件,一页一页手动排版,调字体、对对齐、配图标,一套流程下来,内容还没写多少,时间全花在"把东西摆好看"上了。

后来我尝试过各种模板库,下载了几百套模板,结果发现一个尴尬的事实:模板越花哨,改起来越痛苦。你换一个配色,整套图表的颜色都得跟着调;你删一页,后面的版式全乱。更别提团队协作的时候,每个人审美不一样,最后拼出来的东西风格割裂得像拼贴画。

所以我动了念头:能不能用代码来生成PPT?把内容和样式彻底分离,我只需要关心"讲什么","怎么好看"交给一套可复用的规则去处理。这就是"ppt-master"这个项目的由来。它不是一个现成的软件产品,而是我自己攒的一套用代码驱动演示文稿生成的工具集,核心思路是:用结构化数据描述内容,用模板引擎渲染样式,用脚本批量处理重复劳动。

这篇文章我会把整个项目的设计思路、技术选型、核心实现、踩过的坑,以及实际用下来的效果,完整地拆开讲一遍。适合两类人看:一类是经常做PPT但被排版折磨的技术从业者,另一类是单纯好奇"用代码做PPT到底靠不靠谱"的读者。不管你有没有编程基础,我都会尽量用大白话把原理讲清楚,代码部分也会给出可以直接跑的示例。

先说结论:这套东西帮我把我做一份二十页技术PPT的时间从平均四小时压缩到了四十分钟左右,而且风格统一、改起来极快。它不是万能的,有些场景下手动做反而更快,但在我这种"内容重复度高、样式要求统一、需要频繁迭代"的场景里,它带来的效率提升是实打实的。

2. 拆解"用代码做PPT"这件事到底难在哪

2.1 内容与样式分离:听起来简单,做起来全是细节

任何做过前端或者写过文档的人都知道"内容与样式分离"这个原则。HTML负责结构,CSS负责表现,改样式不用动内容。做PPT其实也应该是这个逻辑,但实际操作起来,难点在于PPT的"样式"比网页复杂得多。

网页里一个段落就是一段文字,加个class就能控制字体、颜色、行距。但PPT里每一页是一个独立的画布,元素的位置是绝对坐标,一个文本框放在哪里、多大尺寸、文字怎么对齐、和旁边的图形怎么配合,这些全是"样式"的一部分。你要把这些东西抽象成可复用的规则,就得先想清楚:哪些属性是全局统一的,哪些是每页单独控制的,哪些是根据内容自动计算的。

我的做法是把一份PPT拆成三层:

  • 内容层:用YAML或者JSON描述每一页的标题、正文、要点、图表数据。这一层只关心"说什么"。
  • 布局层:定义若干种页面布局模板,比如"标题页""目录页""左文右图页""纯图表页""总结页"。每种布局规定了元素的相对位置和占位区域。
  • 主题层:定义配色方案、字体族、字号阶梯、间距规则。换主题就像换皮肤,所有页面自动跟着变。

这三层分开之后,改内容只动第一层,改版式只动第二层,换风格只动第三层。实际用下来,最爽的场景是:老板说"这个配色太冷了,换成暖色调",我只需要改主题文件里的几个色值,三十页PPT瞬间全部更新,不用一页一页去调。

2.2 为什么不用现成的方案:几种主流路线的对比

在动手之前,我调研过几条现成的技术路线,这里把各自的优缺点摆出来,方便你判断自己该走哪条路。

方案核心思路优点缺点
直接操作PPT文件格式用库读写PPT的底层XML结构生成的就是原生PPT,兼容性最好底层结构复杂,调试痛苦,样式控制粒度粗
用HTML/CSS做再转换先写网页,再导出成PPT或PDF前端生态成熟,排版灵活转换过程容易丢样式,动画和交互基本没了
用Markdown转PPT写Markdown,工具自动分页渲染写作体验好,上手快布局控制弱,复杂排版做不了
用绘图库直接画用图形库逐页绘制完全自由,想画啥画啥工作量大,每页都要写坐标,维护成本高

我最后选的是"直接操作PPT文件格式"这条路,具体来说是用Python生态里的一个库来读写PPT文件。原因很简单:我生成的最终产物必须是原生PPT文件,因为要发给别人、要在别人的电脑上打开、要能被人手动微调。如果生成的是网页或者PDF,别人想改一个字都得回来找我,那就失去意义了。

提示:选路线的时候,先想清楚你的最终产物是什么。如果只是自己看,HTML或PDF都行;如果要给别人编辑,那原生PPT格式几乎是唯一选择。

2.3 核心难点:自动排版到底难在哪

手动做PPT的时候,你脑子里其实在做一个复杂的计算:这段文字有多长?放在这个框里会不会溢出?字号要不要调小?图片放左边还是右边?这些判断你做得很快,因为你有眼睛。但代码没有眼睛,它需要你把这些规则显式地写出来。

自动排版的核心难点有三个:

第一是文本溢出。你给一个文本框定了固定高度,但内容多了就会溢出去。解决办法要么是自动缩小字号,要么是自动扩展文本框高度,要么是截断。我采用的是"先估算再调整"的策略:根据字号和文本框宽度估算每行能放多少字,算出总行数,再判断高度够不够。

第二是元素对齐。多个元素放在一起,左对齐、居中对齐、等间距分布,这些在手动操作时点一下按钮就行,在代码里需要精确计算每个元素的坐标。我的做法是封装了一套对齐工具函数,传入一组元素和对其方式,自动算出每个元素的位置。

第三是内容与版式的匹配。同样是一页"三个要点",有的要点只有一行字,有的有三行字,版式得能自适应。我的方案是给每种布局定义"弹性区域",元素在这个区域内根据内容量自动调整大小和位置。

这三个难点解决了,自动排版就基本能用了。下面我会逐个讲具体怎么实现。

3. 项目骨架:三层架构的具体落地

3.1 内容层的数据结构设计

内容层我用的是YAML,因为它的可读性比JSON好,写起来像写大纲,非技术人员也能看懂。一份典型的页面描述长这样:

- layout: title title: "项目复盘:从零搭建自动化工具" subtitle: "技术分享会 第12期" author: "某开发者" - layout: bullets title: "本次分享的三个重点" points: - "为什么要做这件事" - "核心实现思路" - "实际效果与踩坑" - layout: chart title: "效率对比" chart_type: bar data: labels: ["手动制作", "模板套用", "代码生成"] values: [240, 150, 40] unit: "分钟"

你看,这一层完全没有提到字体、颜色、位置。它只描述"这一页是什么类型、有什么内容"。这样做的好处是,我写内容的时候可以完全专注在逻辑和表达上,不用分心去想排版。

这里有个设计决策值得说一下:为什么用layout字段来指定布局,而不是让程序自动判断?因为自动判断布局需要分析内容结构,容易出错,而且不可控。显式指定布局虽然多写一个字段,但结果完全可预期。我试过自动判断的方案,结果是一页本来想做成左右分栏的内容被识别成了纯列表,效果很差。后来果断改成显式指定。

3.2 布局层的模板定义方式

布局层是整套系统的核心。每一种布局,本质上是一个函数:输入内容数据,输出一组带坐标的元素。我用一个配置字典来定义每种布局的元素位置规则。

以"左文右图"布局为例,它的定义大概是这样的:

LAYOUTS = { "text_image": { "regions": { "title": {"x": 0.05, "y": 0.05, "w": 0.9, "h": 0.12}, "text": {"x": 0.05, "y": 0.20, "w": 0.45, "h": 0.70}, "image": {"x": 0.55, "y": 0.20, "w": 0.40, "h": 0.70}, }, "styles": { "title": {"size": 32, "bold": True}, "text": {"size": 18, "line_spacing": 1.5}, } } }

注意这里的坐标用的是相对值(0到1之间),而不是绝对像素或厘米。这样做的好处是,换一个不同尺寸的画布,所有元素会自动按比例缩放,不用重新算坐标。这是我从响应式网页设计里借来的思路。

每个区域定义了位置和尺寸,样式定义了字体相关的属性。渲染的时候,程序遍历这些区域,把对应的内容填进去,再根据内容量做微调。

3.3 主题层的配色与字体管理

主题层管的是"全局观感"。我定义了一个主题文件,里面包含配色方案、字体族、字号阶梯、间距规则。

theme: name: "深蓝商务" colors: primary: "#1A3A5C" secondary: "#4A7BA7" accent: "#E8A33D" text: "#2C2C2C" background: "#FFFFFF" fonts: title: "思源黑体" body: "思源宋体" sizes: title: 32 subtitle: 24 body: 18 caption: 14 spacing: margin: 0.05 gap: 0.03

换主题的时候,只需要改这个文件。我目前维护了五套主题:深蓝商务、浅灰极简、暖橙活力、墨绿学术、暗色科技。不同场合用不同主题,切换成本几乎为零。

这里有个经验:字号阶梯不要设太多级。我一开始设了七八级字号,结果用的时候总是纠结该用哪一级。后来精简到四级(标题、副标题、正文、注释),决策成本大幅降低,整体也更统一。

4. 核心实现:从数据到PPT的完整链路

4.1 文本溢出的估算与处理

文本溢出是自动排版里最烦人的问题。我的处理策略分三步:

第一步,估算文本占用的行数。给定文本内容、字号、文本框宽度,估算每行能放多少个字符。中文字符和英文字符宽度不一样,需要分别计算。我的做法是:中文字符按1个宽度单位算,英文字母和数字按0.5个宽度单位算,然后根据文本框宽度除以单位宽度得到每行字符数。

def estimate_lines(text, font_size, box_width_cm): # 字号转厘米的粗略换算:1磅约等于0.035厘米 char_width = font_size * 0.035 # 中文字符宽度按1算,英文按0.5算 effective_width = sum(1 if ord(c) > 127 else 0.5 for c in text) chars_per_line = max(1, int(box_width_cm / char_width)) return max(1, int(effective_width / chars_per_line) + 1)

第二步,根据行数和行距算出实际需要的高度。如果超过文本框高度,就触发调整。

第三步,调整策略按优先级来:先尝试缩小字号(最多缩到原字号的80%),如果还不够,就扩展文本框高度(前提是下方有空间),最后才考虑截断。

注意:字号缩小不要超过80%,否则和正文其他部分对比太明显,看起来像排版事故。宁可扩展高度或者精简内容。

这套逻辑跑下来,大部分情况都能自动处理。偶尔遇到极端情况(比如一页塞了五百字),程序会输出一个警告日志,提醒我手动处理。这种"自动为主、人工兜底"的策略,比追求100%全自动要务实得多。

4.2 图表元素的动态生成

技术PPT里图表是刚需。我的方案是:在内容层用结构化数据描述图表(类型、数据、标签),渲染时自动生成图表图片,再插入到指定区域。

支持的图表类型包括柱状图、折线图、饼图、散点图。生成图表用的是Python的绘图库,先生成图片文件,再作为图片元素插入PPT。

def render_chart(chart_data, output_path, theme): import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(6, 4)) if chart_data["chart_type"] == "bar": ax.bar(chart_data["data"]["labels"], chart_data["data"]["values"], color=theme["colors"]["primary"]) elif chart_data["chart_type"] == "line": ax.plot(chart_data["data"]["labels"], chart_data["data"]["values"], color=theme["colors"]["primary"], marker="o") ax.set_title(chart_data.get("title", "")) plt.tight_layout() fig.savefig(output_path, dpi=150, transparent=True) plt.close(fig)

这里有个细节:图表图片要设置transparent=True,背景透明,这样插入PPT后能自动融入页面背景色,不会出现一个白色方块贴在彩色背景上的尴尬情况。

另外,图表的配色要从主题里取,不能写死。这样换主题的时候,图表颜色也跟着变,整体协调。

4.3 批量生成与增量更新

这个项目最实用的功能其实是批量生成。我经常遇到的情况是:一份PPT有三十页,其中二十页是数据报表,格式完全一样,只是数据不同。手动做要复制粘贴二十次,用代码就是循环二十次。

for item in data_list: slides.append({ "layout": "chart", "title": item["name"], "chart_type": "bar", "data": item["data"] })

增量更新是另一个实用功能。有时候PPT已经生成好了,我只想改其中一页的内容。如果重新生成整份,之前手动微调过的地方就丢了。我的做法是:给每一页生成一个唯一标识,更新的时候只重新渲染内容变了的页面,其他页面保持原样。

这个功能实现起来比想象中复杂,因为要追踪哪些页面变了。我的简化方案是:内容层用版本号标记,每次生成时对比版本号,只重新渲染版本号变化的页面。虽然不够精细,但覆盖了大部分场景。

5. 实际用下来的效果与那些没人告诉你的坑

5.1 效率提升的真实数据

先摆数据。我记录了使用这套工具前后各做十份技术PPT的耗时:

环节手动制作(平均)代码生成(平均)
内容整理60分钟60分钟
排版调整120分钟10分钟
图表制作40分钟5分钟
风格统一30分钟2分钟
修改迭代50分钟15分钟
合计300分钟92分钟

效率提升主要来自排版、图表和风格统一这三个环节。内容整理的时间没变,因为那部分本来就得靠脑子想。修改迭代的时间也大幅缩短,因为改内容不用重新排版。

但我要诚实地说:第一次搭建这套工具花了我大概两周的业余时间。所以如果你的PPT需求量不大(比如一个月就做一两份),投入产出比并不高。它适合的是高频、大批量、样式要求统一的场景。

5.2 踩过的坑:字体兼容性

第一个大坑是字体。我在主题里指定了"思源黑体",在我自己电脑上渲染得好好的,发给同事打开一看,字体全变了,排版全乱。原因是同事电脑上没装这个字体,PPT自动用了默认字体替代,而默认字体的字宽不一样,导致文本溢出。

解决办法有两个:一是把字体嵌入PPT文件(但会增加文件体积),二是用系统自带的基础字体(比如黑体、宋体),牺牲一点美观换兼容性。我最后选的是方案二,因为我的PPT主要是内部使用,兼容性比美观重要。

提示:如果你的PPT要发给外部人员,字体兼容性一定要提前测试。最稳妥的做法是用目标电脑上肯定有的字体。

5.3 踩过的坑:图片尺寸与比例

第二个坑是图片。自动插入的图片如果尺寸和占位区域不匹配,要么被拉伸变形,要么留白太多。我的解决方案是:插入前先读取图片的实际尺寸,按占位区域的比例做等比缩放,居中放置。

def fit_image(img_path, region_w, region_h): from PIL import Image img = Image.open(img_path) img_ratio = img.width / img.height region_ratio = region_w / region_h if img_ratio > region_ratio: # 图片更宽,以宽度为准 new_w = region_w new_h = region_w / img_ratio else: # 图片更高,以高度为准 new_h = region_h new_w = region_h * img_ratio return new_w, new_h

这段逻辑看着简单,但没它的时候,图片变形的问题能把你逼疯。尤其是团队协作时,别人给的图片比例五花八门,没有自动适配根本没法用。

5.4 踩过的坑:中英文混排的间距

第三个坑比较隐蔽:中英文混排时的间距。中文和英文之间如果不加空格,看起来会挤在一起;如果加了空格,又可能和标点符号冲突。我的处理是在渲染前对文本做一次预处理,在中英文交界处自动插入一个细空格。

这个细节很小,但对最终观感影响很大。我对比过处理前后的效果,处理过的版本明显更"透气",读起来更舒服。

6. 这套东西还能怎么扩展

6.1 从PPT延伸到其他文档格式

这套三层架构(内容层、布局层、主题层)其实不只能生成PPT。我把布局层的渲染器换掉之后,同样的内容层数据可以生成Word文档、PDF报告、甚至网页。内容写一次,多种格式输出,这是这套架构最大的价值。

我目前已经实现了PPT和PDF两种输出。PDF用的是另一套渲染逻辑,但内容层数据完全复用。这意味着我做一次内容整理,既能得到可编辑的PPT,又能得到适合分发的PDF。

6.2 接入自动化流程

更进一步的想法是接入自动化流程。比如每周的周报PPT,数据从数据库里自动拉取,内容层数据自动生成,PPT自动渲染,到点自动发到群里。整个过程不需要人工干预。

我目前实现了一个简化版:从表格文件读取数据,自动生成周报PPT。每周一早上跑一次脚本,五分钟搞定以前要花一小时的活。

6.3 给非技术人员的简化界面

这套工具目前还是命令行操作,对非技术人员不友好。我在考虑做一个简单的网页界面:左边填内容,右边实时预览,点一下导出PPT。这样团队里不写代码的同事也能用。

技术上不难,用现成的Web框架加一个预览组件就行。难点在于实时预览的渲染性能,以及如何让界面足够简单,不让用户被各种选项淹没。

7. 如果你也想搭一套,我的几点实在建议

第一,先从最简单的场景开始。不要一上来就想做全自动排版,先实现"固定布局+内容填充",跑通了再逐步加自适应逻辑。我一开始就想做全自动,结果卡在文本溢出处理上整整一周,后来退回到固定布局,两天就跑通了。

第二,内容层的格式越简单越好。我试过用复杂的嵌套结构描述内容,结果写起来比直接做PPT还累。后来简化成"每页一个类型+若干字段",写作体验立刻上来了。工具是为人服务的,不要为了架构优雅牺牲使用体验。

第三,主题不要超过五套。选择太多等于没有选择。我维护五套主题已经觉得有点多了,实际常用的就两三套。精简主题数量,把每套打磨好,比堆一堆半成品强。

第四,一定要做增量更新。全量重新生成在内容多的时候很慢,而且会丢失手动微调。增量更新虽然实现复杂,但用起来体验天差地别。

第五,接受不完美。自动排版不可能做到100%完美,总有一些页面需要手动调整。我的策略是让程序处理80%的常规页面,剩下20%的特殊页面手动做。追求100%自动化,投入产出比会急剧下降。

我在实际使用中最大的体会是:这套工具的价值不在于"完全替代手动",而在于"把重复劳动自动化,把精力留给真正需要创造力的部分"。排版是重复劳动,交给代码;讲什么、怎么讲,这些需要判断力的部分,还是得自己来。工具再好,也只是工具。

相关新闻

PPT自动化生成实战:基于python-pptx的模板化批量处理与图表动态更新

PPT自动化生成实战:基于python-pptx的模板化批量处理与图表动态更新

1. 项目缘起与核心定位第一次看到“ppt-master”这个命名,我的直觉是:这大概率是一个围绕演示文稿自动化生成或批量处理的工具型项目。在办公自动化领域摸爬滚打这些年,我见过太多团队在PPT上耗费大量重复劳动——每周例会要更新数据图表、每…

2026/10/20 23:03:14 阅读更多 →
Windows 上 ffmpeg 批量转码实战:环境配置、参数调优与避坑指南

Windows 上 ffmpeg 批量转码实战:环境配置、参数调优与避坑指南

简介:这份资源是面向 Windows 平台的多媒体开发工具包,适合音视频处理爱好者、C 开发者以及需要集成编解码能力的工程人员使用。它基于 FFmpeg 4.2.1 的 win32-dev 版本,可用于音视频格式转换、流媒体推拉流、剪辑裁剪、滤镜特效以及自定义编…

2026/10/20 23:03:14 阅读更多 →
Altium Designer 15 常见问题排查与优化实战指南

Altium Designer 15 常见问题排查与优化实战指南

1. 从一次深夜报错说起:AD15到底卡在了哪里 如果你也在用Altium Designer 15(圈内一般直接叫AD15)画板子,大概率经历过下面这些瞬间:原理图画到一半,元件库突然加载不出来;PCB走线走到关键处&am…

2026/10/20 23:03:14 阅读更多 →

最新新闻

Linux挂载NTFS报独占错误?排查链路与解决方案全解析

Linux挂载NTFS报独占错误?排查链路与解决方案全解析

1. 这个报错到底在说什么如果你在 Linux 或 macOS 上挂载一块 Windows 格式(NTFS)的移动硬盘,突然蹦出这么一行字:Mount is denied because the NTFS volume is already exclusively opened. The volume may be already mounted, …

2026/10/20 23:42:34 阅读更多 →
彻底搞懂反弹Shell:原理、常见姿势、流量检测与防御加固

彻底搞懂反弹Shell:原理、常见姿势、流量检测与防御加固

干网络安全这一行的人,早晚都会碰到一个词:反弹Shell。不管你是刚入行的新人,还是已经打过不少授权攻防演练的老手,这个名字几乎会出现在每一次渗透测试、应急响应甚至红蓝对抗里。简单讲,反弹Shell是一种让目标机器主…

2026/10/20 23:42:34 阅读更多 →
DellEMC定制版ESXi 6.7镜像安装与硬件配置实战指南

DellEMC定制版ESXi 6.7镜像安装与硬件配置实战指南

简介:VMware ESXi 6.7.0 Update 3 的 Dell EMC 定制版安装包,面向使用 Dell 服务器的虚拟化运维与管理员,解决在 Dell 硬件上部署或升级裸机虚拟化平台时的驱动兼容与稳定性问题。包内共 157 个文件,以 154 个 VIB 驱动与组件包为…

2026/10/20 23:42:34 阅读更多 →
从CSV到MP4:动态图表视频制作全流程解析

从CSV到MP4:动态图表视频制作全流程解析

做数据可视化项目久了,你会慢慢发现一个规律:真正折磨人的从来不是画图那一下,而是数据本身。CSV 文件看着简单,三五列数据,几万行记录,一旦进入图表环节,各种问题就全冒出来了。缺失值、重复记…

2026/10/20 23:42:34 阅读更多 →
核电设备管理:为什么必须先EAM后ERP

核电设备管理:为什么必须先EAM后ERP

简介:本资源是一份深度剖析核电行业信息化演进路径的行业实践报告,面向电力系统信息化建设者、EAM/ERP实施顾问、能源行业IT管理者及高校能源管理专业师生。文档以大亚湾核电站为全球首个核电EAM落地案例切入,系统阐述其“先EAM后ERP”的渐进…

2026/10/20 23:42:34 阅读更多 →
AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

1. 项目概述:AF_XDP 到底解决什么问题碰上 AF_XDP 这个技术点的人,多半是已经在 Linux 上做高性能包处理,或者被 DPDK 的运维成本折腾过之后,想在内核生态里找个折中方案。AF_XDP 不是一个框架,而是 Linux 内核提供的地…

2026/10/20 23:41:33 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →