PPT转图片拼贴工具 v3.0

软件介绍

这个软件就是将PPT文件转换为图片并且拼接起来。

这个代码支持导入单个文件也支持导入文件夹

但是目前还没有解决可视化界面问题。

效果展示

软件源码

import os
import re
import win32com.client
from PIL import Image
from typing import List, Uniondef convert_ppt_to_png(ppt_path: str, output_folder: str) -> None:"""将单个PPT文件转换为PNG图片"""try:ppt_app = win32com.client.Dispatch("PowerPoint.Application")except Exception as e:raise RuntimeError(f"无法启动 PowerPoint 应用程序: {e}")if not os.path.exists(ppt_path):raise FileNotFoundError(f"PPT 文件不存在: {ppt_path}")presentation = ppt_app.Presentations.Open(ppt_path, WithWindow=False)presentation.SaveAs(output_folder, 18)  # 18 代表 PNG 格式presentation.Close()ppt_app.Quit()def create_collage(input_folder: str, output_folder: str, ppt_name: str, row_size: int = 3, col_gap: int = 10, row_gap: int = 10) -> None:"""从PNG图片创建拼贴画"""# 获取所有幻灯片图片files = os.listdir(input_folder)slide_files = [f for f in files if re.match(r"幻灯片\d+\.png", f, re.IGNORECASE)]if not slide_files:raise RuntimeError(f"未找到幻灯片图片文件")# 按幻灯片序号排序slide_files.sort(key=lambda x: int(re.search(r'\d+', x).group()))# 打开所有图片try:images = [Image.open(os.path.join(input_folder, f)) for f in slide_files]except Exception as e:raise RuntimeError(f"加载图片时出错: {e}")if not images:raise RuntimeError("没有可处理的图片")width, height = images[0].size# 第一行放大显示封面first_img = images[0].resize((width * row_size + col_gap * (row_size - 1), height * row_size + int(col_gap * (row_size - 1) * height / width)), Image.LANCZOS)remaining_images = images[1:]# 计算画布尺寸rows = (len(remaining_images) + row_size - 1) // row_sizecanvas_width = first_img.widthcanvas_height = first_img.height + rows * (height + row_gap)# 创建拼贴画布collage_image = Image.new("RGB", (canvas_width, canvas_height), (255, 255, 255))# 粘贴封面collage_image.paste(first_img, (0, 0))# 粘贴剩余幻灯片for i, img in enumerate(remaining_images):row = i // row_sizecol = i % row_sizex = col * (width + col_gap)y = first_img.height + row * (height + row_gap)collage_image.paste(img, (x, y))# 保存拼贴画collage_path = os.path.join(output_folder, f"{ppt_name}.png")collage_image.save(collage_path)# 删除临时PNG文件for f in slide_files:os.remove(os.path.join(input_folder, f))def process_ppt_item(item_path: str, output_folder: str, row_size: int = 3, col_gap: int = 10, row_gap: int = 10) -> None:"""处理单个PPT文件或文件夹"""if os.path.isfile(item_path):# 处理单个PPT文件if item_path.lower().endswith(('.ppt', '.pptx')):ppt_filename = os.path.basename(item_path)ppt_name = os.path.splitext(ppt_filename)[0]# 转换PPT为PNGconvert_ppt_to_png(item_path, output_folder)# 创建拼贴画create_collage(output_folder, output_folder, ppt_name, row_size, col_gap, row_gap)print(f"✓ 处理完成: {ppt_name}.png")else:print(f"⚠️ 跳过非PPT文件: {os.path.basename(item_path)}")elif os.path.isdir(item_path):# 处理文件夹print(f"处理文件夹: {item_path}")for filename in os.listdir(item_path):file_path = os.path.join(item_path, filename)if file_path.lower().endswith(('.ppt', '.pptx')):process_ppt_item(file_path, output_folder, row_size, col_gap, row_gap)else:print(f"⚠️ 路径不存在或无法访问: {item_path}")if __name__ == "__main__":# 用户配置区域input_path = r'D:\Desktop\文件存储\1'  # 可以是文件或文件夹路径output_folder = r'D:\Desktop\文件存储\1'  # 输出文件夹路径row_size = 3  # 每行图片数量col_gap = 10  # 列间距(像素)row_gap = 10  # 行间距(像素)# 确保输出文件夹存在os.makedirs(output_folder, exist_ok=True)print("开始处理PPT文件...")process_ppt_item(input_path, output_folder, row_size, col_gap, row_gap)print("\n全部处理完成!")input("按回车键退出...")    

源码下载

https://pan.quark.cn/s/100eea4e778f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP学习路线图(三十):微调策略

在自然语言处理领域,预训练语言模型(如BERT、GPT、T5)已成为基础设施。但如何让这些“通才”模型蜕变为特定任务的“专家”?微调策略正是关键所在。本文将深入剖析七种核心微调技术及其演进逻辑。 一、基础概念:为什么需要微调? 预训练模型在海量语料上学习了通用语言表…

讲述我的plc自学之路 第十三章

我和lora都是那种理想主义者,这是我们的共同之处。但是lora比我要更文艺一些,她读的书毕竟比我多,上的又是名校。受北大人文气息的熏陶,她总是对爱情充满了太多幻想。 “说说你的过往吧,lora。”我给lora倒了一杯啤酒&…

GPU虚拟化

引言 现有如下环境(注意相关配置:只有一个k8s节点,且该节点上只有一张GPU卡): // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…

AI智能驱动浏览器工具Browser Use详解

前言 在之前关于 AI 测试相关的几篇文章中,我们分别介绍了通过 playwright-mcp,以及 midscene.js、magentic ui 等几个不同的 AI 浏览器工具,实现 AI 驱动自动化测试的方法介绍。而其实在这些不断涌现的新工具出现之前,还有一个更早推出(2024.11),也同样还在不断完善的…

新成果:GaN基VCSEL动态物理模型开发

作为高速数据传输与光电信号处理的核心器件,垂直腔面发射激光器(VCSEL)在高速光通信、激光雷达等领域应用广泛,其动态特性直接关联器件调制速率及稳定性等关键参数。近期,天津赛米卡尔科技有限公司技术团队开发了GaN基…

嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析

第一部分 移除挂起等待列表中的任务 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循环寻找直到为空,把全部任务扫描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…

大数据+智能零售:数字化变革下的“智慧新零售”密码

大数据+智能零售:数字化变革下的“智慧新零售”密码 大家好,今天咱们聊聊一个火到不行的话题:大数据在智能零售中的应用。这个领域,不仅是技术的“硬核战场”,更是商业创新的风口浪尖。谁能玩转数据,谁就能掌控消费者心智,实现销售爆发。 咱们不搞枯燥学术,而是用最“…

react 常见的闭包陷阱深入解析

一、引子 先来看一段代码,你能说出这段代码的问题在哪吗? const [count, setCount] = useState(0); useEffect(() => {const timer = setTimeout(() => {setCount(count + 1);}, 1000);return () => clearTimeout(timer); }, []);正确答案: 这段代码存在闭包陷阱…

零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)

本期内容和之前的CSRF,File inclusion有联系,复习后可以更好了解 介绍 不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目…

Python训练营---DAY48

DAY 48 随机函数与广播机制 知识点回顾: 随机张量的生成:torch.randn函数卷积和池化的计算公式(可以不掌握,会自动计算的)pytorch的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机…

什么是ANSYS ACT? ACT又可以分为哪几类?

ANSYS作为目前仿真界主流软件之一,除了给用户提供其强大的功能之外,还给用户提供了高度自定义定制的权限。所谓定制,也即用户可以根据自己仿真需求修改现有功能并展示全新功能的产品内操作。定制的目标是改变现有的用户体验,以满足…

电路图识图基础知识-电动机正反转控制电路详解(二十)

1. 转换开关手动正反转控制电路 转换开关(QS)又称倒顺开关,是一种手动控制装置,可切换电动机的旋转方向。它具有三个工作位置:正向、停止和反向。 工作原理: 闭合总电源开关 QS若需正向运转,将…

Spring Boot微服务架构(十):Docker与K8S部署的区别

Spring Boot微服务在Docker与Kubernetes(K8S)中的部署存在显著差异,主要体现在技术定位、管理能力、扩展性及适用场景等方面。以下是两者的核心区别及实践对比: 一、技术定位与核心功能 Docker 功能:专注于单节点容器化…

性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断

🚀 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断 📚 目录 🚀 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断一、为什么选择 MiniProfiler? 🧐二、集成 MiniProf…

ESP32 在Arduino开发环境中,如果程序运行报错如何定位程序报错是哪行代码

在开发中,我们常常会遇到编译正常,但是运行过程中程序报错,然后重启,在这种情况下,又没法知道是哪段程序引起的,现在我们就来解决这个问题。 其实ESP32的SDK中已经附带这些debug的工具了。 首先如果我们程…

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…

win10启动时小键盘灯默认不亮怎么办

第一步,按winR,打开运行。 第二步,输入regedit,打开注册表。 第三步,在注册表编辑器中,依次展开HKEY_ USERS --》.DEFAULT --》Control Panel --》Keyboard , 第四步,选中Keyboard 之后在右侧窗…

C盘的“下载”修改位置时出错了,怎么还原

本来想修改“下载”的位置,结果直接成D盘的快捷键了。 正常应该是D盘里面的一个文件夹,而不是D盘。 而且打开D盘,里面的文件夹,全部按照时间分区显示了,而不是正常的文件显示。 解决办法: 1、还原下载路…

量化面试绿皮书:7. 100的阶乘中有多少个尾随零

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。 7. 100的阶乘中有多少个尾随零 Q: 100 ! 100! 100!(100 的阶乘)中有多少个尾随零? A: 100 ! 100! 100…