PPT转图片拼贴工具 v1.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 = r'D:\Desktop\文件存储\1\6.5世界环境日主题课件1.pptx'
    output_folder = r'D:\Desktop\文件存储\1'
    row_size = 3  # 每行图片数量
    col_gap = 10  # 列间距(像素)
    row_gap = 10  # 行间距(像素)
    
    # 从PPT路径中提取文件名(不带扩展名)
    ppt_filename = os.path.basename(ppt)
    ppt_name = os.path.splitext(ppt_filename)[0]

    # 确保输出文件夹存在
    os.makedirs(output_folder, exist_ok=True)

    # 首先将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/7aee9f6a4d62

相关推荐
m0_6174939435 分钟前
Python OpenCV 透视变换(Perspective Transform)详解与实战
开发语言·python·opencv
小李不困还能学38 分钟前
PyCharm下载安装与配置教程
ide·python·pycharm
博观而约取厚积而薄发1 小时前
Pytest 从入门到精通,一篇就够(超详细实战教程)
python·测试工具·单元测试·自动化·pytest
imzed1 小时前
使用 Playwright + Pytest 构建 Web UI 自动化测试框架
python·自动化·pytest
普通网友1 小时前
pytest一些常见的插件
开发语言·python·pytest
时空系1 小时前
Python 高性能高压缩打包器 —— 基于 JianPy 语义分析引擎
python
cndes2 小时前
给Miniconda换源,让包下载更迅速
开发语言·python
Metaphor6922 小时前
使用 Python 添加、隐藏和删除 PDF 图层
python·pdf·图层
丨白色风车丨2 小时前
【Python 计算机视觉】基于 Dlib+OpenCV 实现实时人眼疲劳检测(闭眼预警)
python·opencv·计算机视觉