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

从图片到PPT:用Python实现多图片格式(PNG/JPG/SVG)到幻灯片的批量转换

目录

引言

安装必要的库

1. 将单个 PNG 或 JPG 图片转换为 PPT 幻灯片

1.1 生成与图片尺寸匹配的幻灯片

1.2 自定义幻灯片大小和图片位置

2. 批量将多张 PNG 或 JPG 图片转换为 PPT 幻灯片

2.1 为每张图片生成单独的幻灯片

2.2 自定义每页幻灯片中的图片数量

3. 将 SVG 图片转换为可编辑的PPT形状

总结


引言

在制作演示文稿时,想必大家常常需要将各种格式的图片插入到 PPT 中。虽然手动操作不算难,但如果要处理大量的图片,任务就变得非常繁琐了。而借助 Python,我们可以轻松实现将图片批量转换为 PPT 幻灯片。

这篇文章将详细介绍如何使用 Python 将各种图片转换为 PPT 幻灯片,甚至批量处理多个图片,同时确保图片质量不受损。

本文主要涵盖的内容如下:

  • 将单张 PNG 或 JPG 图片转换为 PPT 幻灯片,并保持图片的原始大小
  • 自定义幻灯片的大小和图片的位置
  • 批量将多个 PNG 或 JPG 图片转换为独立的幻灯片
  • 自定义每张幻灯片上的图片数量
  • 将 SVG 图片转换为可编辑的 PPT 形状

安装必要的库

要使用 Python 将图片转换为 PPT,需要安装一个支持处理演示文稿的库。本文使用 Spire.Presentation for Python,该库支持生成PPT文档以及对PPT文档进行多种操作,包括插入图片,调整幻灯片大小,将PPT文档保存为PDF、图片格式等,而且不需要运行环境安装 Microsoft PowerPoint。

安装方法

在程序终端中运行以下命令,即可安装该库:

pip install Spire.Presentation

安装完成后,就可以使用该库提供的接口来实现各种图片转PPT需求了。

1. 将单个 PNG 或 JPG 图片转换为 PPT 幻灯片

1.1 生成与图片尺寸匹配的幻灯片

将图片转换为 PPT 幻灯片时,保持图片的原始分辨率和比例非常重要。为了避免图片被拉伸或失真,我们可以通过设置幻灯片的尺寸与图片尺寸一致来实现这一点。

代码示例

from spire.presentation import *# 创建 PPT 演示文稿对象
presentation = Presentation()# 删除默认幻灯片
presentation.Slides.RemoveAt(0)# 加载图片
imagePath = r"C:\Users\Administrator\Downloads\Images\1.png"
stream = Stream(imagePath)
imageData = presentation.Images.AppendStream(stream)
stream.Close()# 获取图片尺寸
imageWidth = float(imageData.Width)
imageHeight = float(imageData.Height)# 设置幻灯片尺寸与图片一致
presentation.SlideSize.Type = SlideSizeType.Custom
presentation.SlideSize.Size = SizeF(imageWidth, imageHeight)# 添加新幻灯片
slide = presentation.Slides.Append()# 插入图片
rect = RectangleF(0.0, 0.0, imageWidth, imageHeight)
pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
pptImage.Line.FillType = FillFormatType.none# 保存演示文稿
presentation.SaveToFile("单张图片转PPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()

输出效果

图片填满整个幻灯片,且保持原始尺寸和比例:

https://miro.medium.com/v2/resize:fit:630/1*pJFqu4s0HqCjm2V4goQ4bw.png

1.2 自定义幻灯片大小和图片位置

在某些情况下,你可能希望使用固定的幻灯片大小(如 16:9 宽屏或 A4 比例),而不是完全匹配图片的尺寸。这种方法有助于保持演示文稿的统一风格。同时你还可以控制图片的位置,例如,将图片居中或放在指定的边距内。

以下示例展示了如何:

  • 设置固定的幻灯片大小
  • 在图片周围添加边距
  • 将图片居中显示

代码示例

from spire.presentation import *# 创建新的 PowerPoint 演示文稿
presentation = Presentation()# 删除默认的第一张幻灯片
presentation.Slides.RemoveAt(0)# 加载图片
imagePath = r"C:\Users\Administrator\Downloads\Images\1.png"
stream = Stream(imagePath)
imageData = presentation.Images.AppendStream(stream)
stream.Close()# 设置标准的 16:9 宽屏幻灯片尺寸
presentation.SlideSize.Type = SlideSizeType.Screen16x9
slide = presentation.Slides.Append()# 获取幻灯片和图片的尺寸
slideWidth = presentation.SlideSize.Size.Width
slideHeight = presentation.SlideSize.Size.Height
imgWidth = float(imageData.Width)
imgHeight = float(imageData.Height)# 设置边距
margin = 30.0# 按比例缩放图片以适应幻灯片边距
scale = min((slideWidth - 2 * margin) / imgWidth, (slideHeight - 2 * margin) / imgHeight)
scaledWidth = imgWidth * scale
scaledHeight = imgHeight * scale# 将图片居中显示
x = (slideWidth - scaledWidth) / 2
y = (slideHeight - scaledHeight) / 2# 插入图片
rect = RectangleF(x, y, scaledWidth, scaledHeight)
pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
pptImage.Line.FillType = FillFormatType.none# 保存演示文稿
presentation.SaveToFile("自定义幻灯片大小和图片位置.pptx", FileFormat.Pptx2013)
presentation.Dispose()

输出效果

图片被按比例缩放并居中显示,同时保持幻灯片的 16:9 宽屏比例,且图片与幻灯片边缘保持一定的边距。

https://miro.medium.com/v2/resize:fit:630/1*_ST7N6C4gd5GSRiPQ0akBw.png

2. 批量将多张 PNG 或 JPG 图片转换为 PPT 幻灯片

2.1 为每张图片生成单独的幻灯片

如果你有多张 PNG 或 JPG 图片(如产品照片或扫描文档页面),你可以批量将它们自动转换为 PPT,每张图片对应一张幻灯片,且每张幻灯片的尺寸自动与图片的尺寸匹配,确保图片保留原始比例。

代码示例

import os
from spire.presentation import *# 创建新的 PowerPoint 演示文稿
presentation = Presentation()# 删除默认的幻灯片
presentation.Slides.RemoveAt(0)# 定义图片文件夹路径
baseDir = r"C:\Users\Administrator\Downloads\Images"# 获取文件夹中的所有图片文件
picFiles = [f for f in os.listdir(baseDir) if os.path.isfile(os.path.join(baseDir, f))]# 遍历所有图片文件
for picFile in picFiles:# 添加新幻灯片slide = presentation.Slides.Append()# 加载图片imagePath = os.path.join(baseDir, picFile)stream = Stream(imagePath)imageData = presentation.Images.AppendStream(stream)stream.Close()# 设置幻灯片尺寸与图片尺寸匹配imageWidth = float(imageData.Width)imageHeight = float(imageData.Height)presentation.SlideSize.Type = SlideSizeType.Custompresentation.SlideSize.Size = SizeF(imageWidth, imageHeight)# 插入图片rect = RectangleF(0.0, 0.0, imageWidth, imageHeight)pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)pptImage.Line.FillType = FillFormatType.none# 保存演示文稿
presentation.SaveToFile("MultipleImagesToPPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()

输出效果

最终生成的 PPT文件包含多个幻灯片,每张幻灯片显示一张图片。

2.2 自定义每页幻灯片中的图片数量

在实际使用场景中,你可能需要将多张图片添加到单个幻灯片中,以便高效地比较或展示图片数据。要实现这一点,我们可以将幻灯片划分为网格,然后将图片放置在相应的网格单元格中。

例如:

  • 每页 2 张图片:划分为一个简单的 1x2 网格(两张图片并排排列)。
  • 每页 4 张图片:划分为一个 2x2 网格(四张图片排列成两行两列)。
  • 每页 6 张图片:划分为一个 2x3 网格(六张图片排列成两行三列)。

根据每页要显示的图片数量,动态调整网格布局,这样可以确保图片均匀分布,布局整洁且一致。

代码示例

以下示例展示了如何将每个幻灯片划分为网格,并根据每页幻灯片的图片数量(例如 2张或4张)将图片放置到每个网格单元格中。图片会自动缩放以适应分配的单元格,并且幻灯片的布局会相应调整。

import os
from spire.presentation import *def add_images_to_slide(slide, image_files, images_per_slide, slide_width, slide_height, margin=20.0):"""该函数根据指定的网格布局(例如每页 2 张、4 张或更多图片)将图片添加到幻灯片。"""# 计算网格的行数和列数columns = int(images_per_slide ** 0.5)  # 列数(每页图片数量的平方根)rows = (images_per_slide + columns - 1) // columns  # 计算行数# 计算每个图片的宽度和高度cell_width = (slide_width - 2 * margin) / columnscell_height = (slide_height - 2 * margin) / rows# 遍历图片并将它们放置到网格中for i in range(images_per_slide):if i >= len(image_files):break  # 防止超出可用图片的数量# 加载图片image_path = os.path.join(baseDir, image_files[i])stream = Stream(image_path)image_data = presentation.Images.AppendStream(stream)stream.Close()# 获取图片的尺寸image_width = float(image_data.Width)image_height = float(image_data.Height)# 缩放图片以适应单元格scale = min(cell_width / image_width, cell_height / image_height)scaled_width = image_width * scalescaled_height = image_height * scale# 计算图片在网格中的位置(x, y)row = i // columnscol = i % columnsx = margin + col * cell_width + (cell_width - scaled_width) / 2  # 在单元格中水平居中y = margin + row * cell_height + (cell_height - scaled_height) / 2  # 在单元格中垂直居中# 插入图片rect = RectangleF(x, y, scaled_width, scaled_height)ppt_image = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, image_data, rect)ppt_image.Line.FillType = FillFormatType.none# 创建一个新的演示文稿
presentation = Presentation()# 删除默认幻灯片
presentation.Slides.RemoveAt(0)# 定义图片文件夹路径
baseDir = r"C:\Users\Administrator\Downloads\Images"# 获取文件夹中的所有文件
image_files = [f for f in os.listdir(baseDir) if os.path.isfile(os.path.join(baseDir, f))]# 定义每页幻灯片中图片的数量(2、4、6 等)
images_per_slide = 4  # 可以根据需要调整此值为 2、4、6 等# 遍历图片并将它们添加到幻灯片中
for i in range(0, len(image_files), images_per_slide):# 添加新的幻灯片slide = presentation.Slides.Append()# 获取本页幻灯片的图片add_images_to_slide(slide, image_files[i:i + images_per_slide], images_per_slide,presentation.SlideSize.Size.Width, presentation.SlideSize.Size.Height)# 保存演示文稿
presentation.SaveToFile("MultipleImagesPerSlide.pptx", FileFormat.Pptx2013)
presentation.Dispose()

输出效果:

生成的 PPT 幻灯片根据图片数量划分为相应的网格布局。每个网格中将放置一张图片,且图片自动缩放以适应网格尺寸:

关于行数和列数计算方法说明:

1. 列数 (columns) 计算方法:

columns = int(images_per_slide ** 0.5)

这里使用了平方根 images_per_slide ** 0.5,是因为如果每一列的数量相等,形成一个近似的正方形布局,平方根可以给出合适的列数。例如:

如果每张幻灯片有 4 张图片,sqrt(4) = 2,那么可以采用 2 列 2 行的布局。

如果有 6 张图片,sqrt(6) 约等于 2.45,所以 int(2.45) 将列数取为 2。

2. 行数 (rows) 计算方法:

rows = (images_per_slide + columns - 1) // columns

这行代码计算所需的行数。公式 (images_per_slide + columns - 1) // columns 之所以这样设计,是为了确保足够的行数:

images_per_slide 是总的图片数量。

columns 是已计算出的列数。

+ columns - 1 是为了向上取整,从而避免因整除导致图片数量不足的情况。例如:

如果有 6 张图片,columns 为 2,计算行数时:

rows = (6 + 2 - 1) // 2 = 7 // 2 = 3,实际上只需要 3 行来放置图片。

3. 将 SVG 图片转换为可编辑的PPT形状

与 PNG 和 JPG 等位图格式不同,SVG 文件是矢量图,因此它可以在不失真的情况下无限放大。在 PowerPoint 中,我们可以将 SVG 图片作为可编辑的形状插入,保留其清晰度并且能够随时进行修改(如组合、设置颜色、调整大小等)。

代码示例

from spire.presentation import *# 创建 PowerPoint 演示文稿对象
presentation = Presentation()# 定义 SVG 文件路径
SvgFile = r"C:\Users\Administrator\Downloads\Images\Sample.svg"# 将 SVG 文件插入为可编辑的 PowerPoint 形状
presentation.Slides[0].Shapes.AddFromSVGAsPicture(SvgFile)# 保存演示文稿
presentation.SaveToFile("SVG转PPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()

总结

本文详细介绍了如何使用 Python 将不同格式的图片,如 PNG、JPG 和 SVG, 批量转换为 PPT 幻灯片。文章涵盖了以下几个关键点:

  • 单张图片转换:将单张 PNG 或 JPG 图片转换为 PPT 幻灯片,保持图片原始大小,或自定义幻灯片的尺寸和图片位置。
  • 批量转换:批量将多张 PNG 或 JPG 图片转换为多个幻灯片,并根据需要调整每张幻灯片上图片的数量,例如按网格布局排列。
  • SVG 转换:将 SVG 文件转换为 PowerPoint 可编辑的图形,保留图片的高质量和可编辑性。

希望本文能帮助你更加高效地处理 PPT 中的图片插入任务,节省操作时间,提升工作效率。

感谢阅读,本文完结!

http://www.dtcms.com/a/609390.html

相关文章:

  • 鸿蒙应用构建体系深度解析:ABC、HAP、HAR、HSP与APP的技术全貌
  • Go 项目结构与编码规范
  • Docker + Nginx 部署 Java 项目(JAR 包 + WAR 包)实战笔记
  • 第四十三篇:多进程编程(Multiprocessing):如何真正实现并行计算?
  • 建设产品网站安徽整站优化
  • [大模型应用].Net下接入VLM多模态模型分析
  • asp网站改成php开发公司招聘
  • 基于GOOSE通信的防逆流保护系统在5.8MW分布式光伏项目中的应用
  • Airsim仿真、无人机、无人车、Lidar深度相机应用研究!
  • OpenCV中TrackBar控件
  • 基于Matlab多目标粒子群优化的无人机三维路径规划与避障研究
  • 嵌入式系统-实验三——串口通信实验
  • 2025cesium进阶教程|Cesium 天气特效实现:从 ShaderToy 移植下雪效果的完整方案
  • 数据库 - SQL
  • 单页网站seo怎么做秦皇岛高端网站设计
  • 做网商必备网站手机百度关键词优化
  • python实现电脑手势识别截图
  • openEuler 全场景操作系统下 cpolar 内网穿透的价值深挖与协同优化
  • 为什么选择威洛博直线模组——从 3C、新能源、半导体到医疗的大致解析
  • 利用ArcPy批量检查管线隐患点与周边设施距离的实现方案
  • 【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC SDK 音视频传输技术分析
  • 政务机关数字化办公核心系统
  • 盐城做网站企业新增网站推广教程
  • 衡东建设局网站公司内部交流 网站模板
  • 自己做网站要买什么在网站制作前需要有哪些前期策划工作
  • RAG系统学习之——RAG技术详解与实战指南
  • ASC学习笔记0014:手动添加一个新的属性集
  • 通过手机远程操控电脑,一步步学习便捷方法
  • 【AI学习-comfyUI学习-Segment Anything分割+实时图像裁剪-各个部分学习-第九节2】
  • [Linux]学习笔记系列 -- [kernel[params