用 Python 从 PowerPoint 演示文稿中提取图像

图像是一种有效的沟通方式,使内容生动。这就是图像在网页、文档、演示文稿等中被广泛采用的原因。MS PowerPoint 演示文稿通常由更少的文本和更多的图形对象和图像组成。因此,在以编程方式处理演示文稿时,您可能需要将图像与文本一起提取。为此,本文介绍了如何在 Python 中从 PPTPPTX 演示文稿中提取图像。

从演示文稿中提取图像的 Python 库

为了从 PowerPoint 演示文稿中提取图像,我们将使用 Aspose.Slides for Python via .NET。它是一个强大的 Python 库,旨在从头开始创建演示文稿。此外,它还允许您无缝转换和操作现有的演示文稿。您可以使用以下 pip 命令从 PyPI 安装它。

> pip install aspose.slides

在 Python 中从 PowerPoint PPT 中提取图像

以下是使用 Python 从 PowerPoint 演示文稿中提取图像的步骤。

  • 使用 Presentation 类加载演示文稿。
  • 使用 Presentation.images 集合循环浏览演示文稿中的图像。
  • 将每个图像保存为文件。

以下代码示例展示了如何在 Python 中从 PPTX 文件中提取图像。

import aspose.slides as slides
import aspose.pydrawing as drawing

imageIndex=1
# 加载演示
with slides.Presentation("presentation.pptx") as pres:

    # 循环浏览图像
   for image in pres.images:
        file_name = "Image_{0}.{1}"
        image_type = image.content_type.split("/")[1]
        image_format = get_image_format(image_type)

        # 保存图片
        image.system_image.save(file_name.format( imageIndex, image_type), image_format)
        imageIndex = imageIndex + 1

从 PPT 中的形状中提取图像

在某些情况下,您可能只需要从演示文稿中的形状中提取图像。那么让我们看看如何在 Python 中从 PPT 中的形状中提取图像。

  • 首先,使用 Presentation 类加载演示文稿。
  • 然后,使用 Presentation.slides 集合循环浏览演示文稿的幻灯片。
  • 对于每张幻灯片,使用 ISlide.shapes 集合访问其形状。
  • 对于集合中的每个形状,执行以下步骤:
    • 如果形状是自动形状并且其填充类型是图片,则使用 IShape.fillformat.picturefillformat.picture.image 属性提取图像。
    • 如果形状是相框,则使用 IShape.pictureformat.picture.image 属性提取图像。
    • 最后,将图像保存为文件。

以下代码示例展示了如何使用 Python 从 PPT 演示文稿中的形状中提取图像。

import aspose.slides as slides
import aspose.pydrawing as drawing

# 加载演示
with slides.Presentation("pres.pptx") as pres:
    slideIndex = 0
    image_type = ""
    
    # 循环播放幻灯片
   for slide in pres.slides:
        slideIndex += 1
        image_format = drawing.imaging.ImageFormat.jpeg
        file_name = "BackImage_Slide_{0}{1}.{2}"
      
        # 遍历幻灯片中的形状
       for i in range(len(slide.shapes)):
            shape = slide.shapes[i]
            shape_image = None

            # 检查形状是自动形状还是相框
            if type(shape) is slides.AutoShape and shape.fill_format.fill_type == slides.FillType.PICTURE:
                shape_image = shape.fill_format.picture_fill_format.picture.image
            elif type(shape) is slides.PictureFrame:
                shape_image = shape.picture_format.picture.image

            # 保存图片
            if shape_image is not None:
                image_type = shape_image.content_type.split("/")[1]
                image_format = get_image_format(image_type)

                shape_image.system_image.save(
                                file_name.format("shape_"+str(i)+"_", slideIndex, image_type), 
                                image_format)

从 PPT 中的幻灯片背景中提取图像

另一种情况可能是提取用作幻灯片背景的图像。以下是仅从 PPT 演示文稿中的幻灯片背景中提取图像的步骤。

  • 首先,使用 Presentation 类加载演示文稿。
  • 然后,使用 Presentation.slides 集合循环浏览演示文稿的幻灯片。
  • 对于每张幻灯片,请执行以下步骤:
    • 使用 ISlide.background.fillformat.filltype 属性检查幻灯片是否有背景图像。
    • 如果背景有图片,则使用 ISlide.background.fillformat.picturefillformat.picture.image 属性提取图像。
    • 使用 ISlide.layoutslide.background.fillformat.filltype 属性检查布局幻灯片是否具有背景图像。
    • 如果背景填充有图片,则使用 ISlide.layoutslide.background.fillformat.picturefillformat.picture.image 属性提取它。
    • 最后,将提取的图像保存为文件。

以下代码示例展示了如何在 Python 中从 PPT 中的幻灯片背景中提取图像。

import aspose.slides as slides
import aspose.pydrawing as drawing

# 加载演示
with slides.Presentation("pres.pptx") as pres:
    slideIndex = 0
    image_type = ""
    
    # 在演示文稿中循环播放幻灯片
   for slide in pres.slides:
        slideIndex += 1
        image_format = drawing.imaging.ImageFormat.jpeg
        back_image = None
        file_name = "BackImage_Slide_{0}{1}.{2}"
        is_layout = False

        # 检查幻灯片和布局幻灯片的背景是否充满图片
        if slide.background.fill_format.fill_type == slides.FillType.PICTURE:
            back_image = slide.background.fill_format.picture_fill_format.picture.image
        elif slide.layout_slide.background.fill_format.fill_type == slides.FillType.PICTURE:
            back_image = slide.layout_slide.background.fill_format.picture_fill_format.picture.image
            is_layout = True

        # 保存图片
        if back_image is not None:
            image_type = back_image.content_type.split("/")[1]
            image_format = get_image_format(image_type)

            back_image.system_image.save(
                file_name.format("LayoutSlide_" if is_layout else "", slideIndex, image_type), 
                image_format)

上述两个代码示例都使用了 getimageformat 方法,该方法为提供的类型返回适当的图像格式。下面提供了该方法的实现。

import aspose.slides as slides
import aspose.pydrawing as drawing

def get_image_format(image_type):
    return {
        "jpeg": drawing.imaging.ImageFormat.jpeg,
        "emf": drawing.imaging.ImageFormat.emf,
        "bmp": drawing.imaging.ImageFormat.bmp,
        "png": drawing.imaging.ImageFormat.png,
        "wmf": drawing.imaging.ImageFormat.wmf,
        "gif": drawing.imaging.ImageFormat.gif,
    }.get(image_type, drawing.imaging.ImageFormat.jpeg)

获得免费许可证

您可以通过 .NET 获得 免费的临时许可证 使用 Aspose.Slides for Python,而不受评估限制。

结论

在本文中,您学习了如何使用 Python 从 PowerPoint 演示文稿中提取图像。我们还分别介绍了从形状和幻灯片背景中提取图像。此外,您可以通过访问 文档 探索更多关于 Aspose.Slides for Python 的信息。此外,您可以通过我们的 论坛 提问。

也可以看看

信息:Aspose 提供 PowerPoint 到图像转换器 - PPT to JPG 和 [PPT to PNG][] - 允许您根据演示文稿中的幻灯片生成图像。