You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python提取PPTX文件占位符中嵌入的图片?

提取PPT中所有图片(含占位符内图片)

当前代码可提取幻灯片独立形状及组内的图片,但无法获取占位符中嵌入的图片,且已通过shape.width > 250000设置最小宽度过滤条件。以下是修复后的完整代码:

import os
import pptx
from pptx.enum.shapes import MSO_SHAPE_TYPE

ppFileName = "Test.pptx"

directory = os.path.dirname(__file__)
imageDirectory = directory + "\\Images " + ppFileName.replace(".pptx", "")
if not os.path.exists(imageDirectory):
    os.makedirs(imageDirectory)

def saveImage(shape, slideNumber, imageNumber):
    image = shape.image
    imageBytes = image.blob
    imageFileName = f"Slide {slideNumber} Image {imageNumber}.{image.ext}"
    imagePath = imageDirectory + "\\" + imageFileName
    with open(imagePath, 'wb') as file:
        file.write(imageBytes)
    return imageNumber + 1  # 返回更新后的计数,确保序号连续

prs = pptx.Presentation(directory + "\\" + ppFileName)
slideNumber = 0
for slide in prs.slides:
    imageNumber = 0
    for shape in slide.shapes:
        # 处理独立图片形状
        if shape.shape_type == MSO_SHAPE_TYPE.PICTURE and shape.width > 250000:
            imageNumber = saveImage(shape, slideNumber, imageNumber)
        # 处理组内图片
        elif shape.shape_type == MSO_SHAPE_TYPE.GROUP and shape.width > 250000:
            for s in shape.shapes:
                if s.shape_type == MSO_SHAPE_TYPE.PICTURE and s.width > 250000:
                    imageNumber = saveImage(s, slideNumber, imageNumber)
        # 处理占位符中的图片
        elif shape.shape_type == MSO_SHAPE_TYPE.PLACEHOLDER:
            # 检查占位符是否包含图片
            if hasattr(shape, 'image') and shape.image is not None and shape.width > 250000:
                imageNumber = saveImage(shape, slideNumber, imageNumber)
    slideNumber += 1

关键修改说明:

  • 新增占位符处理分支:针对MSO_SHAPE_TYPE.PLACEHOLDER类型的形状,通过hasattr(shape, 'image')判断是否包含图片资源,符合尺寸要求则执行保存
  • 修复计数逻辑:原代码中图片序号仅在函数内递增,改为函数返回更新后的计数,保证每张图片的序号连续不重复
  • 组内图片补全过滤:给组内的子图片也加上宽度判断,避免不符合尺寸要求的小图被误提取

内容的提问来源于stack exchange,提问作者Baron McDonald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 01:06:19