下面是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)
布局选项:
-
全屏图片 - 图片充满整个幻灯片
-
带标题 - 图片上方显示文件名作为标题
-
居中显示 - 图片在幻灯片中央显示
功能特点:
-
✅ 支持自定义输入图片文件夹
-
✅ 支持自定义输出PPT文件位置
-
✅ 保持原文件名(在标题布局中显示)
-
✅ 支持多种图片格式(jpg, jpeg, png, bmp)
-
✅ 自动调整图片大小适应PPT页面
-
✅ 图片按文件名排序
-
✅ 三种不同的布局选择
-
✅ 错误处理和进度显示
输出示例:
-
输入文件夹包含:
image1.jpg
,image2.jpg
,image3.jpg
-
输出:
presentation.pptx
(包含3页幻灯片,每页一张图片)