PPT转图片拼贴工具 v2.0

软件介绍

这个软件的作用就是将文件夹里面的PPT文件转换为图片并且拼接起来。

但是我还没有解决可视化界面问题

效果展示如下:

软件源码

python 复制代码
import os
import re
import win32com.client
from PIL import Image

def convert_ppt_to_png(ppt: str, output_folder: str) -> None:
    try:
        pptObj = win32com.client.Dispatch("PowerPoint.Application")
    except Exception as e:
        raise RuntimeError(f"无法启动 PowerPoint 应用程序: {e}")
    if not os.path.exists(ppt):
        raise FileNotFoundError(f"PPT 文件不存在: {ppt}")
    presentation = pptObj.Presentations.Open(ppt, WithWindow=False)
    presentation.SaveAs(output_folder, 18)
    presentation.Close()
    pptObj.Quit()

def create_collage(input_folder: str, output_folder: str, ppt_name: str, row_size: int, col_gap: int, row_gap: int) -> None:
    # 加载图片
    files = os.listdir(input_folder)
    # 匹配"幻灯片数字.png"格式的文件,不区分大小写
    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_size
    canvas_width = first_img.width
    canvas_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_size
        col = i % row_size
        x = col * (width + col_gap)
        y = first_img.height + row * (height + row_gap)
        collage_image.paste(img, (x, y))
    
    # 指定拼贴画的保存路径,使用PPT文件名
    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))

if __name__ == "__main__":
    ppt_folder = r'D:\Desktop\文件存储\1'  # PPT 文件夹路径
    output_folder = r'D:\Desktop\文件存储\1'  # 输出文件夹路径
    row_size = 3  # 每行图片数量
    col_gap = 10  # 列间距(像素)
    row_gap = 10  # 行间距(像素)
    
    # 确保输出文件夹存在
    os.makedirs(output_folder, exist_ok=True)
    
    # 遍历 PPT 文件夹中的所有 PPT 文件
    for filename in os.listdir(ppt_folder):
        if filename.endswith(('.ppt', '.pptx')):
            ppt = os.path.join(ppt_folder, filename)
            # 从 PPT 路径中提取文件名(不带扩展名)
            ppt_filename = os.path.basename(ppt)
            ppt_name = os.path.splitext(ppt_filename)[0]

            # 首先将 PPT 转换为 PNG 图片
            convert_ppt_to_png(ppt, output_folder)

            # 然后从生成的图片创建拼贴画
            create_collage(output_folder, output_folder, ppt_name, row_size, col_gap, row_gap)

            print(f"处理完成,拼贴画已保存为: {ppt_name}.png")
    
    # 保持程序打开,等待用户输入
    input("按回车键退出...")

源码获取

https://pan.quark.cn/s/cb51a1d51d03

相关推荐
恸流失20 分钟前
DJango项目
后端·python·django
Julyyyyyyyyyyy1 小时前
【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
python·selenium·pycharm·自动化
蓝婷儿2 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
CYRUS_STUDIO2 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向
love530love2 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
水银嘻嘻3 小时前
05 APP 自动化- Appium 单点触控& 多点触控
python·appium·自动化
狐凄3 小时前
Python实例题:Python计算二元二次方程组
开发语言·python
烛阴4 小时前
Python枚举类Enum超详细入门与进阶全攻略
前端·python
Shujie_L5 小时前
【Android基础回顾】四:ServiceManager
android
Think Spatial 空间思维5 小时前
【实施指南】Android客户端HTTPS双向认证实施指南
android·网络协议·https·ssl