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

作者:

文章目录
  • 在制作演示文稿时,想必大家常常需要将各种格式的图片插入到 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需求了。
  • 与 PNG 和 JPG 等位图格式不同,SVG 文件是矢量图,因此它可以在不失真的情况下无限放大。在 PowerPoint 中,我们可以将 SVG 图片作为可编辑的形状插入,保留其清晰度并且能够随时进行修改(如组合、设置颜色、调整大小等)。 代码示例: from spire.presentation import * # 创建 PowerPoint 演示文稿对象 presentation = Presentation() # 定义 SVG 文件路径 SvgFile = r”C:UsersAdministratorDownloadsImagesSample.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 可编辑的图形,保留图片的高质量和可编辑性。 到此这篇关于Python实现多图片格式(PNG/JPG/SVG)到幻灯片的批量转换的文章就介绍到这了,更多相关Python图片转PPT内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 基于Python实现高效PPT转图片工具 使用Python将PPT的幻灯片和形状转为多种图片格式 如何使用Python实现PPT批量转图片 Python PyMuPDF实现PDF与图片和PPT相互转换
  • 目录
    • 引言
    • 安装必要的库
    • 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需求了。

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

        代码示例

        from spire.presentation import *
        
        # 创建 PPT 演示文稿对象
        presentation = Presentation()
        
        # 删除默认幻灯片
        presentation.Slides.RemoveAt(0)
        
        # 加载图片
        imagePath = r"C:UsersAdministratorDownloadsImages1.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()

        输出效果

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

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

        以下示例展示了如何:

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

        代码示例

        from spire.presentation import *
        
        # 创建新的 PowerPoint 演示文稿
        presentation = Presentation()
        
        # 删除默认的第一张幻灯片
        presentation.Slides.RemoveAt(0)
        
        # 加载图片
        imagePath = r"C:UsersAdministratorDownloadsImages1.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 宽屏比例,且图片与幻灯片边缘保持一定的边距。

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

        代码示例

        import os
        from spire.presentation import *
        
        # 创建新的 PowerPoint 演示文稿
        presentation = Presentation()
        
        # 删除默认的幻灯片
        presentation.Slides.RemoveAt(0)
        
        # 定义图片文件夹路径
        baseDir = r"C:UsersAdministratorDownloadsImages"
        
        # 获取文件夹中的所有图片文件
        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.Custom
            presentation.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 张图片:划分为一个简单的 1×2 网格(两张图片并排排列)。
        • 每页 4 张图片:划分为一个 2×2 网格(四张图片排列成两行两列)。
        • 每页 6 张图片:划分为一个 2×3 网格(六张图片排列成两行三列)。

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

        代码示例

        以下示例展示了如何将每个幻灯片划分为网格,并根据每页幻灯片的图片数量(例如 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) / columns
            cell_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 * scale
                scaled_height = image_height * scale
        
                # 计算图片在网格中的位置(x, y)
                row = i // columns
                col = i % columns
                x = 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:UsersAdministratorDownloadsImages"
        
        # 获取文件夹中的所有文件
        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 行来放置图片。

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

        代码示例

        from spire.presentation import *
        
        # 创建 PowerPoint 演示文稿对象
        presentation = Presentation()
        
        # 定义 SVG 文件路径
        SvgFile = r"C:UsersAdministratorDownloadsImagesSample.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 可编辑的图形,保留图片的高质量和可编辑性。

        到此这篇关于Python实现多图片格式(PNG/JPG/SVG)到幻灯片的批量转换的文章就介绍到这了,更多相关Python图片转PPT内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        您可能感兴趣的文章:

        • 基于Python实现高效PPT转图片工具
        • 使用Python将PPT的幻灯片和形状转为多种图片格式
        • 如何使用Python实现PPT批量转图片
        • Python PyMuPDF实现PDF与图片和PPT相互转换

        站内搜索