当前位置: 首页 > news >正文

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.lqws.cn/news/143731.html

相关文章:

  • Spark 写文件
  • Dubbo Logback 远程调用携带traceid
  • 41道Django高频题整理(附答案背诵版)
  • PostgreSQL 的扩展pg_prewarm
  • 20250605在微星X99主板中配置WIN10和ubuntu22.04.6双系统启动的引导设置
  • Django CMS 的 Demo
  • NoSQL之Redis配置与优化
  • SQL Server相关的sql语句
  • 嵌入式学习 D33:系统编程--网路编程
  • ubuntu 端口复用
  • Ubuntu20.04设置为开机后直接自动进入纯命令行界面
  • 【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • Excel-vlookup -多条件匹配,返回指定列处的值
  • [测试_10] Selenium IDE | cssSelector | XPath | 操作测试
  • Haproxy的基础配置
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)
  • 111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为变革管理华为企业变革华为的管理模式案例培训
  • EXCEL通过DAX Studio获取端口号连接PowerBI
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • 三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
  • 【个人笔记】数据库原理(西电)
  • vscode里如何用git
  • gorm多租户插件的使用
  • Linux下使用Transformers,模型和数据集的位置
  • 把握时代脉搏,铸就行业标杆:珠江电缆未来发展战略展望
  • 【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • Day13
  • PPT转图片拼贴工具 v1.0