使用 python-pptx 提取自选图形的背景图像
Extract Background Image of an AutoShape with python-pptx
我正在尝试使用 python-pptx 从 PPTX 文件中提取所有图像。我成功地对具有图片样式的形状的图像执行了此操作:
shape.shape_type == MSO_SHAPE_TYPE.PICTURE
但我正在努力提取已添加到幻灯片中的图像,方法是将它们设置为自动形状中的背景图像
shape.shape_type == MSO_SHAPE_TYPE.AUTO_SHAPE
有没有什么方法可以从自选图形中提取背景图像,或者这根本不可能通过 API?
遗憾的是,目前无法通过 API 实现。您必须转到底层 XML 以获得看起来像 blipFill
或类似的元素,并使用它必须到达相关图像的 rId
。
您可以使用以下方法检查形状的 XML:
print(shape._sp.xml)
然后您可以使用 XPath 获取 rId
值:
rId = shape._sp.xpath({xpath expr to rId attr})[0]
获得 rId
值后,您可以使用以下方法获取对 ImagePart
的引用:
image_part = slide.part.related_part(rId)
一旦你有了图像部分,我希望你知道该怎么做,得到类似 image_part.image
的东西:https://github.com/scanny/python-pptx/blob/master/pptx/parts/image.py#L21
我正在尝试使用 python-pptx 从 PPTX 文件中提取所有图像。我成功地对具有图片样式的形状的图像执行了此操作:
shape.shape_type == MSO_SHAPE_TYPE.PICTURE
但我正在努力提取已添加到幻灯片中的图像,方法是将它们设置为自动形状中的背景图像
shape.shape_type == MSO_SHAPE_TYPE.AUTO_SHAPE
有没有什么方法可以从自选图形中提取背景图像,或者这根本不可能通过 API?
遗憾的是,目前无法通过 API 实现。您必须转到底层 XML 以获得看起来像 blipFill
或类似的元素,并使用它必须到达相关图像的 rId
。
您可以使用以下方法检查形状的 XML:
print(shape._sp.xml)
然后您可以使用 XPath 获取 rId
值:
rId = shape._sp.xpath({xpath expr to rId attr})[0]
获得 rId
值后,您可以使用以下方法获取对 ImagePart
的引用:
image_part = slide.part.related_part(rId)
一旦你有了图像部分,我希望你知道该怎么做,得到类似 image_part.image
的东西:https://github.com/scanny/python-pptx/blob/master/pptx/parts/image.py#L21