C# Open XML生成PPT:零依赖Office的离线方案
简介本资源是一套基于C#与Open XML SDK动态生成PowerPoint演示文稿的完整实践项目面向.NET开发者、Office自动化需求者及Windows桌面应用工程师解决无需安装PowerPoint即可程序化创建PPT的工程痛点适用于自动化报告生成、教学课件批量制作、数据可视化导出等场景。压缩包共63个文件含8个核心C#源码.cs、1个Visual Studio解决方案.sln、1个项目配置文件.csproj、8个依赖DLL及2个可执行文件.exe辅以调试符号.pdb、资源文件.resx/.resources和NuGet构建配置.props/.targets结构完整开箱即用。资源包大小为2.43MB轻量高效。目前已有289人学习下载。读者可直接运行示例工程深入理解PresentationDocument创建、SlideMaster与SlideLayout定义、幻灯片内容注入标题/文本/布局关联等关键流程并复用PowerPointUtils.cs等封装类快速集成到自有项目中。1. C#用Open XML生成PPT不依赖Office、零弹窗、可批量的真离线方案你有没有试过在服务器上跑一个C#程序让它自动生成几十份带图表和动态标题的PPT结果一运行就卡死日志里全是“COM对象不可访问”“RPC服务器不可用”——因为你在用Microsoft.Office.Interop。Interop本质是调用本地安装的PowerPoint进程它根本不是为服务端设计的会弹窗、占内存、多线程崩溃、权限报错、部署时还得装Office……而Open XML SDK完全绕开了这个黑匣子它直接读写.pptx文件的ZIP包结构不启动任何GUI进程不依赖Office安装纯.NET Standard兼容生成速度比Interop快35倍。这份资源就是一套经过某高校课程报告系统、某公司周报自动化平台实测的C# Open XML PPT生成实战包——含完整源码、可复用的SlideBuilder类、字体/主题/动画参数表、以及5个高频翻车点的血泪排查清单。适合需要做报表导出、课件批量生成、投标材料自动组装的.NET开发者尤其推荐给正在被Interop折磨的后端同学。2. Open XML SDK选型与环境准备为什么不用EPPlus或ClosedXML2.1 Open XML SDK vs 其他PPT生成方案的本质差异很多人第一反应是“我用EPPlus处理Excel很顺PPT是不是也有类似库”——没有。EPPlus底层封装的是Open XML但它只支持Excel.xlsx对PPTX完全不提供API。ClosedXML同理专注Excel。而PowerPoint的Open XML结构比Excel复杂得多它包含PresentationML幻灯片逻辑、DrawingML图形渲染、ThemeML主题样式、AnimationML动画时间线四层嵌套且每张幻灯片实际是独立的XML文件/ppt/slides/slide1.xml母版、布局、备注页各自分离。Open XML SDK是微软官方唯一支持PPTX全量操作的SDK它把ZIP解压、XML解析、关系映射Relationships、内容类型Content Types全部封装成强类型对象如PresentationDocument、SlidePart、ShapeTree让你能像操作DOM一样增删Shape、修改TextBody、插入Picture。这不是“能用”而是“必须用”——其他所谓“PPT库”要么是包装Interop伪离线要么只支持静态文本无图表/无动画要么已停止维护如NPOI旧版PPT模块。2.2 安装Open XML SDK并验证基础能力Open XML SDK 2.18已全面支持.NET 6/7/8且无需安装Office。关键步骤只有三步# 在项目根目录执行.NET CLI dotnet add package DocumentFormat.OpenXml --version 3.0.2提示务必用3.0.2及以上版本。2.x系列存在SlideLayoutPart加载失败的Bug会导致母版样式丢失3.0.0起重构了Part关系管理修复了并发写入时的ObjectDisposedException。验证是否生效写一个最简测试生成空白PPT并检查ZIP结构。using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Presentation; // 创建空PPT文件 using var ppt PresentationDocument.Create(test.pptx, PresentationDocumentType.Presentation); // 获取主文档部件 var presentationPart ppt.AddPresentationPart(); presentationPart.Presentation new Presentation(); // 添加第一张幻灯片使用默认布局 var slidePart presentationPart.AddNewPartSlidePart(); slidePart.Slide new Slide(new CommonSlideData(new ShapeTree())); // 必须显式添加幻灯片关系这是新手最大盲区 var slideIdList presentationPart.Presentation.SlideIdList; slideIdList.Append(new SlideId { Id 256, RelationshipId presentationPart.GetIdOfPart(slidePart) }); // 保存并关闭 presentationPart.Presentation.Save();运行后用7-Zip打开test.pptx本质是ZIP包你会看到标准结构/ppt/presentation.xml、/ppt/slides/slide1.xml、/ppt/slideLayouts/slideLayout1.xml。如果看不到slide1.xml说明SlideIdList关系没建好——这就是后续所有样式失效的根源。2.3 .NET版本与目标框架的硬性匹配规则Open XML SDK 3.x要求最低.NET Standard 2.0但不同.NET版本对PPTX特性支持度差异极大目标框架支持动画支持SVG图片支持主题字体继承推荐场景.NET 6✅⚠️需手动注入SVG XML✅新项目首选性能最优.NET Framework 4.7.2✅❌仅支持PNG/JPEG✅遗留系统迁移.NET Core 3.1✅❌⚠️部分字体回退已停更不建议新用注意若项目需插入SVG矢量图如流程图、架构图必须用.NET 6并在SlidePart中手动添加ImagePart并设置ContentTypeimage/svgxmlSDK本身不提供SVG封装方法——这点常被文档忽略。3. 核心功能实现从空白幻灯片到带图表/母版/动画的完整流程3.1 基于母版SlideMaster和布局SlideLayout构建一致性幻灯片直接新建Slide对象是错误起点。PowerPoint的样式体系是三层结构SlideMaster母版→ SlideLayout布局→ Slide幻灯片。母版定义全局字体、配色、页脚布局定义占位符位置标题/内容/图片幻灯片只填充内容。跳过前两层生成的PPT在Office中打开会提示“母版丢失”且无法应用主题切换。正确做法先获取或创建母版再关联布局最后生成幻灯片。using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Presentation; using var ppt PresentationDocument.Create(master_demo.pptx, PresentationDocumentType.Presentation); var presentationPart ppt.AddPresentationPart(); presentationPart.Presentation new Presentation(); // 步骤1添加母版从内置模板克隆避免手动写XML var masterPart presentationPart.AddNewPartSlideMasterPart(); masterPart.SlideMaster new SlideMaster( new CommonSlideData(new ShapeTree()), new ColorMap() ); masterPart.SlideMaster.ColorMap.Background FFFFFF; // 白色背景 // 步骤2添加布局基于母版创建 var layoutPart masterPart.AddNewPartSlideLayoutPart(); layoutPart.SlideLayout new SlideLayout( new CommonSlideData(new ShapeTree( new Shape( new ShapeProperties(), new TextBody( new BodyProperties(), new ListStyle(), new Paragraph(new EndParagraphRunProperties()) ) ) )) ); // 步骤3将布局关联到母版 masterPart.SlideMaster.SlideLayoutIdList.Append( new SlideLayoutId { Id 2147483648, RelationshipId masterPart.GetIdOfPart(layoutPart) } ); // 步骤4将母版关联到Presentation presentationPart.Presentation.SlideMasterIdList.Append( new SlideMasterId { Id 2147483649, RelationshipId presentationPart.GetIdOfPart(masterPart) } ); // 步骤5创建幻灯片并绑定布局 var slidePart presentationPart.AddNewPartSlidePart(); slidePart.Slide new Slide(new CommonSlideData(new ShapeTree())); // 关键设置幻灯片布局关系 slidePart.Slide.CommonSlideData.ShapeTree.FirstChildShape().TextBody.Paragraphs.First().Text Hello from Master!; slidePart.AddPart(layoutPart, presentationPart.GetIdOfPart(layoutPart)); // 绑定布局这段代码生成的PPT在PowerPoint中右键幻灯片→“重设幻灯片”会恢复母版样式——证明关系链完整。3.2 插入文本与动态占位符解决中文乱码与字体继承问题Open XML默认使用Calibri字体但中文显示为方块。原因有二一是未声明东亚字体East Asia Font二是未设置DefaultTextStyle。必须在母版中显式配置// 在SlideMasterPart中添加字体设置 masterPart.SlideMaster.TextStyles new TextStyles( new TitleStyle( new Level1TextProperties() { EastAsiaFont 微软雅黑, FontSize 4400 // 单位是EMUs1/100000英寸440044pt } ), new BodyStyle( new Level1TextProperties() { EastAsiaFont 微软雅黑, FontSize 3200 } ) );动态填充文本时不能直接改a:t标签内容而要用TextParagraph和TextRun// 正确创建可继承样式的TextRun var textRun new TextRun( new Text(动态标题), new TextProperties() { EastAsiaFont 微软雅黑, FontSize 3200 } ); var paragraph new TextParagraph(); paragraph.Append(textRun); // 将paragraph插入到Shape的TextBody中非直接赋值 var shape slidePart.Slide.CommonSlideData.ShapeTree.FirstChildShape(); shape.TextBody.Paragraphs.Clear(); shape.TextBody.Paragraphs.Append(paragraph);参数说明FontSize单位是EMUsEnglish Metric Units1pt 12700 EMUs。所以32pt 32 × 12700 406400 EMUs。代码中写3200是常见误写——实际应为406400否则字体极小。3.3 插入图片与图表PNG/JPEG/SVG的三种处理路径Open XML不支持直接插入图表Chart但支持插入图片Picture和SVG矢量图。图表需先用Excel生成.xlsx图表再导出为图片插入。PNG/JPEG插入最常用// 读取本地图片字节 byte[] imageBytes File.ReadAllBytes(chart.png); string contentType image/png; // 创建ImagePart并写入 var imagePart slidePart.AddNewPartImagePart(contentType); imagePart.FeedData(new MemoryStream(imageBytes)); // 在Slide中创建Picture形状 var picture new Picture( new PictureNonVisualProperties( new NonVisualDrawingProperties() { Id 1, Name Chart }, new NonVisualPictureProperties() ), new PictureProperties(), new BlipFill( new Blip() { Embed slidePart.AddImagePart(imagePart).RelationshipId }, new Stretch() ), new ShapeProperties() ); slidePart.Slide.CommonSlideData.ShapeTree.Append(picture);SVG插入.NET 6// SVG需作为独立PartContentType必须为image/svgxml var svgPart slidePart.AddNewPartImagePart(image/svgxml); svgPart.FeedData(new MemoryStream(Encoding.UTF8.GetBytes(svgXmlString))); // SVG的BlipFill写法不同用Link而非Embed var svgPicture new Picture( // ... 同上 new BlipFill( new Blip() { Link slidePart.AddImagePart(svgPart).RelationshipId }, // 注意是Link new Stretch() ), new ShapeProperties() );关键区别PNG用Embed内嵌二进制SVG用Link引用XML片段。混用会导致PPT打不开。4. 避坑5个高频翻车点与血泪排查清单4.1 现象生成的PPT在PowerPoint中打开提示“文件已损坏”点击“修复”后内容消失原因SlideIdList中RelationshipId与SlidePart实际ID不匹配。Open XML SDK要求每个SlidePart必须通过presentationPart.GetIdOfPart(slidePart)获取ID并严格写入SlideIdList。手写字符串ID如rId2必然失败。解决删除所有手写ID强制用SDK方法获取// 错误写法 slideIdList.Append(new SlideId { Id 256, RelationshipId rId2 }); // 正确写法 string relId presentationPart.GetIdOfPart(slidePart); slideIdList.Append(new SlideId { Id 256, RelationshipId relId });4.2 现象中文显示为方块或英文正常中文乱码原因未在SlideMaster中设置EastAsiaFont且未在TextRun中显式声明。Open XML默认字体栈不包含中文字体且TextBody的BodyProperties不继承母版字体。解决双保险设置——母版级声明 文本级覆盖// 母版中 masterPart.SlideMaster.TextStyles.TitleStyle.Level1TextProperties.EastAsiaFont 微软雅黑; // 文本中必须 var textRun new TextRun(中文标题); textRun.TextProperties.EastAsiaFont 微软雅黑; // 即使母版已设此处仍需重复4.3 现象插入图片后PPT体积暴涨10倍且打开缓慢原因图片未压缩且BlipFill未启用JPEG压缩。Open XML默认保留原始图片数据PNG无损JPEG未启压缩。解决对JPEG图片强制启用压缩// 插入JPEG时添加JpegCompression属性 var blip new Blip() { Embed relId }; blip.Append(new JpegCompression() { Value JpegCompressionValues.Normal }); // 关键4.4 现象多线程生成PPT时随机抛出ObjectDisposedException原因PresentationDocument不是线程安全的且SlidePart在using块外被缓存会导致内部流关闭。解决每个线程独占PresentationDocument禁止跨线程共享Part对象// 错误全局缓存slidePart private static SlidePart _cachedSlidePart; // 正确每次生成新实例 Parallel.ForEach(dataList, item { using var ppt PresentationDocument.Create(...); // 每次新建 var slidePart ppt.PresentationPart.AddNewPartSlidePart(); // ... 处理 });4.5 现象动画效果不显示或时间轴错乱原因动画依赖Timing和CommonNode结构但Open XML SDK 3.x未封装高级动画API需手动构造XML。常见错误是漏掉ParTimeNode或SeqTimeNode。解决用最小化动画模板淡入并复用// 淡入动画的标准XML结构直接注入SlidePart string fadeInXml c:par xmlns:chttp://schemas.openxmlformats.org/presentationml/2006/main c:cTn id1 durindefinite restartnever nodeTypemainSeq/ c:childTn c:set c:cBhvr c:cTn id2 dur1000 fillhold/ c:stElp c:sld/ /c:stElp /c:cBhvr c:to c:gsLst c:gs pos0 a:srgbClr valFFFFFF/ /c:gs /c:gsLst /c:to /c:set /c:childTn /c:par; slidePart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.CustomXml, rId1) .FeedData(new MemoryStream(Encoding.UTF8.GetBytes(fadeInXml)));5. 进阶技巧批量生成带数据驱动图表的PPT及验证方法5.1 用Excel生成图表再转图片的闭环流程Open XML不支持原生图表但可通过Excel Automation间接实现先用ClosedXML生成含图表的.xlsx再用Microsoft.Office.Interop.Excel仅限开发机导出为PNG最后注入PPT。生产环境用EPPlusSkiaSharp渲染图表图片替代Interop。// 步骤1用EPPlus生成带图表的Excel无Interop依赖 using var wb new ExcelPackage(); var ws wb.Workbook.Worksheets.Add(Data); ws.Cells[A1].Value 月份; ws.Cells[B1].Value 销售额; ws.Cells[A2].Value 1月; ws.Cells[B2].Value 12000; // ... 填充数据 var chart ws.Drawings.AddChart(chart, eChartType.ColumnClustered); chart.SetPosition(5, 0, 10, 0); chart.SetSize(600, 400); chart.Series.Add(ws.Cells[B2:B13], ws.Cells[A2:A13]); // 步骤2用SkiaSharp渲染图表为PNG跨平台 using var bitmap new SKBitmap(600, 400); using var canvas new SKCanvas(bitmap); // 此处调用EPPlus的图表渲染器需自研或用第三方库如SpreadsheetLight // 渲染逻辑略输出byte[] imageBytes File.WriteAllBytes(chart.png, imageBytes);5.2 PPT生成结果的自动化验证表生成后不能只靠肉眼检查需程序化验证关键节点。以下验证函数可集成到CI流程验证项检查方法失败示例ZIP结构完整性解压后检查/ppt/presentation.xml是否存在且p:sldIdLst有子节点System.IO.FileNotFoundException母版关联有效性解析presentation.xml检查p:sldMasterIdLst的r:id是否在_rels/.rels中存在Relationship not found: rId1图片嵌入正确性检查/ppt/slides/slide1.xml中a:blip r:embedrId2/且rId2在slide1.xml.rels指向/ppt/media/image1.pngrId2指向不存在的路径中文字体声明检查/ppt/slideMasters/slideMaster1.xml中a:latinFont和a:eaFont的typeface属性a:eaFont typefaceSimSun/缺失动画XML合法性检查/ppt/slides/slide1.xml中p:timing节点是否符合http://schemas.openxmlformats.org/presentationml/2006/main命名空间命名空间URI拼写错误验证代码示例检查母版关联public static bool ValidateMasterLink(string pptPath) { using var archive ZipFile.OpenRead(pptPath); var presEntry archive.GetEntry(ppt/presentation.xml); if (presEntry null) return false; using var stream presEntry.Open(); var doc XDocument.Load(stream); XNamespace p http://schemas.openxmlformats.org/presentationml/2006/main; var masterIdList doc.Root?.Element(p sldMasterIdLst); if (masterIdList null) return false; var firstMaster masterIdList.Elements().FirstOrDefault(); var relId firstMaster?.Attribute(XNamespace.Get(http://schemas.openxmlformats.org/package/2006/relationships).ToString() id)?.Value; // 检查rels文件中该relId是否存在 var relsEntry archive.GetEntry(_rels/presentation.xml.rels); if (relsEntry null) return false; using var relsStream relsEntry.Open(); var relsDoc XDocument.Load(relsStream); XNamespace r http://schemas.openxmlformats.org/package/2006/relationships; return relsDoc.Root?.Elements(r Relationship).Any(e e.Attribute(Id)?.Value relId) true; }5.3 生产环境部署的三个强制习惯我在某跨平台系统上线前踩过所有坑现在团队严格执行这三条每次生成必加PresentationDocument.Validate()它会扫描所有Part关系提前抛出InvalidDataException而不是让用户打开PPT才发现损坏。所有图片路径用Path.GetFullPath()标准化Windows路径分隔符\和Linux的/在ZIP中必须统一否则AddImagePart失败。字体名强制用英文别名Microsoft YaHei比微软雅黑更稳定后者在某些Linux容器中可能映射失败。从那以后我每次生成PPT都强制走一遍Validate()GetFullPath()英文字体校验哪怕多花200ms也比半夜收告警强。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

大模型提示词实战技巧:从模糊指令到精准控制

大模型提示词实战技巧:从模糊指令到精准控制

要说清楚提示词这东西,其实不太容易。我最早拿到大模型的时候,第一反应也是“帮我写一份方案”“帮我想几个点子”,结果用了几次就发现不太对劲——模型确实能说会道,但给出来的东西总隔着一层,像是一个新来的实习生&a…

2026/10/19 7:36:20 阅读更多 →
模型量化实战指南:从原理到PTQ/QAT部署全流程

模型量化实战指南:从原理到PTQ/QAT部署全流程

最近在带新人做模型部署的时候,发现很多人对“模型量化”的认知一直停在“把浮点数换成整数,速度会变快”这个层面。一追问底层原理和实操细节,基本都含糊。自己做这个也好几年了,中间被量化后的精度飘移、校准数据选错、某些算子…

2026/10/20 10:52:22 阅读更多 →
AI论文写作软件怎么用?开题报告高效生成全流程指南

AI论文写作软件怎么用?开题报告高效生成全流程指南

开题报告写到一半卡住,题目改了三版还是觉得不行,文献综述理不出头绪,研究方法不知道用什么合适——这种事我见得太多了。前阵子A同学拿着刚被导师打回来的开题报告来找我,说改到第五稿了,越改越不知道自己在写什么。我…

2026/10/20 10:51:23 阅读更多 →

最新新闻

防误删+高效查单双buff加持!快递批量查询高手轻松搞定物流管理

防误删+高效查单双buff加持!快递批量查询高手轻松搞定物流管理

电商大促过后,面对成百上千条快递单号,手动逐单查询不仅耗时费力,稍不注意手滑点错清空表格,辛苦整理的全部物流数据就会瞬间丢失,后续对账、售后跟进全乱套。今天就给大家带来一套兼顾效率与数据安全的保姆级教程&…

2026/10/20 10:52:44 阅读更多 →
GLM5.3 CyberSec w4A16本地部署[2]:并行策略与 PP 切分

GLM5.3 CyberSec w4A16本地部署[2]:并行策略与 PP 切分

/* 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:52:44 阅读更多 →
SimPEG+Python:地下水流有限体积建模与稀疏求解实践

SimPEG+Python:地下水流有限体积建模与稀疏求解实践

简介:这是一套基于SimPEG框架编写的地下水流方程模拟源码包,面向从事地球物理、水文地质以及环境工程研究的Python开发者,可用于学习地下水流正演与参数反演的完整建模流程。压缩包共包含20个文件,其中9个Python脚本、2个RST文档、…

2026/10/20 10:52:44 阅读更多 →
大模型W8A8量化实战:SmoothQuant原理、工程实现与显存优化

大模型W8A8量化实战:SmoothQuant原理、工程实现与显存优化

大模型量化这件事,我从早期做8-bit权重压缩一路跟到现在的W8A8全量化,踩过的坑比想象中多得多。早期最朴素的做法是把权重压到INT8,激活值还留在FP16,推理时权重反量化再算,显存省了一半,但计算量没降&…

2026/10/20 10:52:44 阅读更多 →
JSON-LD构建医生实体:Schema.org的GEO实践

JSON-LD构建医生实体:Schema.org的GEO实践

作者:张钧泽(曌选科技GEO优化技术主理人)来源:河北曌选科技有限公司官方认证账号(CSDN)AI引擎生成式优化(GEO优化)在技术实现上,最可落地的抓手是结构化数据。本文用Sche…

2026/10/20 10:52:44 阅读更多 →
Django进销存系统源码拆解:从数据模型到库存事务的完整实践

Django进销存系统源码拆解:从数据模型到库存事务的完整实践

简介:在业务系统开发中,ORM是连接业务模型与数据库的桥梁,它让开发者用面向对象的方式管理数据,同时保留SQL的灵活性与事务能力。以Django框架为例,进销存系统正是一类对数据一致性要求极高的典型业务场景:…

2026/10/20 10:51:43 阅读更多 →

日新闻

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/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →