python的脚本 ,可以把多个jpg转换一个PPT文件功能!

下面是Python的代码:

import os
import argparse
from pptx import Presentation
from pptx.util import Inches
from PIL import Image

def get_image_size(image_path):
    """获取图片尺寸并计算适合PPT的比例"""
    with Image.open(image_path) as img:
        width, height = img.size
        # 计算适合PPT的比例(保持宽高比)
        ppt_width = Inches(10)  # PPT宽度设为10英寸
        ratio = ppt_width / width
        ppt_height = height * ratio
        return ppt_width, ppt_height

def convert_jpg_to_ppt(input_folder, output_ppt_path, layout_choice=1):
    """
    将JPG文件夹中的图片转换为PPT文件
    
    参数:
    input_folder (str): 输入图片文件夹路径
    output_ppt_path (str): 输出PPT文件路径
    layout_choice (int): 布局选择,1=全屏,2=带标题,3=居中
    """
    
    # 检查输入文件夹是否存在
    if not os.path.exists(input_folder):
        print(f"错误: 输入文件夹 '{input_folder}' 不存在")
        return False
    
    # 获取所有JPG文件(支持.jpg和.jpeg)
    image_files = [f for f in os.listdir(input_folder) 
                  if f.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp'))]
    
    if not image_files:
        print(f"在文件夹 '{input_folder}' 中未找到图片文件")
        return False
    
    # 按文件名排序
    image_files.sort()
    print(f"找到 {len(image_files)} 个图片文件")
    
    try:
        # 创建PPT演示文稿
        prs = Presentation()
        
        # 根据布局选择不同的幻灯片布局
        if layout_choice == 1:
            # 布局1:全屏图片(空白布局)
            slide_layout = prs.slide_layouts[6]  # 空白布局
        elif layout_choice == 2:
            # 布局2:标题+内容
            slide_layout = prs.slide_layouts[1]
        else:
            # 布局3:只有标题
            slide_layout = prs.slide_layouts[0]
        
        # 添加每个图片作为一页幻灯片
        for i, image_file in enumerate(image_files, 1):
            image_path = os.path.join(input_folder, image_file)
            
            print(f"正在处理: {image_file} ({i}/{len(image_files)})")
            
            # 创建新幻灯片
            slide = prs.slides.add_slide(slide_layout)
            
            # 如果是带标题的布局,添加标题
            if layout_choice == 2:
                title = slide.shapes.title
                title.text = f"图片 {i}: {os.path.splitext(image_file)[0]}"
            
            # 添加图片到幻灯片
            try:
                # 获取图片尺寸并计算适合的比例
                pic_width, pic_height = get_image_size(image_path)
                
                # 计算居中位置
                left = (Inches(13.33) - pic_width) / 2  # PPT宽度约13.33英寸
                top = (Inches(7.5) - pic_height) / 2   # PPT高度约7.5英寸
                
                # 添加图片
                pic = slide.shapes.add_picture(
                    image_path, 
                    left, 
                    top, 
                    width=pic_width
                )
                
            except Exception as e:
                print(f"处理图片 {image_file} 时出错: {e}")
                continue
        
        # 确保输出目录存在
        output_dir = os.path.dirname(output_ppt_path)
        if output_dir and not os.path.exists(output_dir):
            os.makedirs(output_dir)
        
        # 保存PPT文件
        prs.save(output_ppt_path)
        print(f"PPT文件已保存: {output_ppt_path}")
        print(f"共创建了 {len(image_files)} 页幻灯片")
        return True
        
    except Exception as e:
        print(f"创建PPT时发生错误: {e}")
        return False

def main():
    parser = argparse.ArgumentParser(description='批量将JPG图片转换为PPT文件')
    parser.add_argument('--input', '-i', required=True, help='输入图片文件夹路径')
    parser.add_argument('--output', '-o', required=True, help='输出PPT文件路径(包括文件名)')
    parser.add_argument('--layout', '-l', type=int, default=1, choices=[1, 2, 3],
                       help='布局选择: 1=全屏图片, 2=带标题, 3=居中 (默认1)')
    
    args = parser.parse_args()
    
    print(f"输入文件夹: {os.path.abspath(args.input)}")
    print(f"输出PPT文件: {os.path.abspath(args.output)}")
    print(f"布局模式: {args.layout}")
    print("-" * 50)
    
    success = convert_jpg_to_ppt(args.input, args.output, args.layout)
    
    if success:
        print("PPT文件创建成功!")
    else:
        print("PPT文件创建失败!")

if __name__ == "__main__":
    # 如果没有使用命令行参数,可以使用交互模式
    try:
        main()
    except SystemExit:
        # 如果用户没有提供命令行参数,使用交互式输入
        print("JPG转PPT工具")
        print("=" * 50)
        
        input_folder = input("请输入图片文件夹路径: ").strip()
        output_ppt = input("请输入输出PPT文件路径(例如: C:/output/my_ppt.pptx): ").strip()
        
        # 如果没有指定文件扩展名,自动添加.pptx
        if not output_ppt.lower().endswith('.pptx'):
            output_ppt += '.pptx'
        
        print("\n请选择布局模式:")
        print("1. 全屏图片(图片充满整个幻灯片)")
        print("2. 带标题(图片上方显示文件名作为标题)")
        print("3. 居中显示(图片在幻灯片中央)")
        
        layout_input = input("请输入布局选择 (默认1,直接回车使用默认值): ").strip()
        layout = 1 if layout_input == "" else int(layout_input)
        
        if layout not in [1, 2, 3]:
            print("无效的布局选择,使用默认值1")
            layout = 1
        
        if not os.path.exists(input_folder):
            print(f"错误: 输入文件夹 '{input_folder}' 不存在")
        else:
            success = convert_jpg_to_ppt(input_folder, output_ppt, layout)
            if success:
                print("PPT文件创建成功!")
            else:
                print("PPT文件创建失败!")

安装必要的依赖:

在运行脚本前,需要安装以下依赖:

# 安装python-pptx和Pillow
pip install python-pptx Pillow

使用方法:

方式1:命令行参数

python jpg_to_ppt.py --input /path/to/images/folder --output /path/to/output/presentation.pptx --layout 1

方式2:交互式输入

直接运行脚本,按提示输入:

  • 图片文件夹路径

  • 输出PPT文件路径

  • 布局选择(1, 2, 3)

布局选项:

  1. 全屏图片 - 图片充满整个幻灯片

  2. 带标题 - 图片上方显示文件名作为标题

  3. 居中显示 - 图片在幻灯片中央显示

功能特点:

  1. ✅ 支持自定义输入图片文件夹

  2. ✅ 支持自定义输出PPT文件位置

  3. ✅ 保持原文件名(在标题布局中显示)

  4. ✅ 支持多种图片格式(jpg, jpeg, png, bmp)

  5. ✅ 自动调整图片大小适应PPT页面

  6. ✅ 图片按文件名排序

  7. ✅ 三种不同的布局选择

  8. ✅ 错误处理和进度显示

输出示例:

  • 输入文件夹包含:image1.jpgimage2.jpgimage3.jpg

  • 输出:presentation.pptx(包含3页幻灯片,每页一张图片)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值