Получи картинку - Python-pptx - PullRequest
3 голосов
/ 31 мая 2019

Я пытаюсь прочитать файл .pptx, используя python-pptx. Мне удалось получить весь контент, кроме изображения из презентации. Ниже приведен код, который я использовал для идентификации изображений, отличных от текстовых кадров в презентации. После идентификации я получаю auto_shape_type как RECTANGLE (1), но ничего об изображении.

from pptx import Presentation
from pptx.shapes.picture import Picture

def read_ppt(file):
    prs = Presentation(file)
    for slide_no, slide in enumerate(prs.slides):
        for shape in slide.shapes:
            if not shape.has_text_frame:
                print(shape.auto_shape_type)

Любая помощь в понимании этой проблемы приветствуется. Альтернативные варианты также приветствуются.

1 Ответ

2 голосов
/ 31 мая 2019

попробуйте запросить shape.shape_type.по умолчанию auto_shape_type возвращает прямоугольник, как вы уже видели, хотя изображения могут быть вставлены и замаскированы и другими фигурами.

Обратите внимание, что значением по умолчанию для вновь вставленного изображения является MSO_AUTO_SHAPE_TYPE.RECTANGLE, которое не выполняет обрезку, поскольку экстенты прямоугольника точно соответствуют экстентам изображения.

shape_type должен возвращать:

Уникальное целое число, идентифицирующее тип этой фигуры, безоговорочно MSO_SHAPE_TYPE.PICTURE вв этом случае.

Вы можете извлечь содержимое изображения в файл, используя его свойство blob и записав двоичный файл:

from pptx import Presentation
pres = Presentation('ppt_image.pptx')
slide = pres.slides[0]
shape = slide.shapes[0]
image = shape.image
blob = image.blob
ext = image.ext
with open(f'image.{ext}', 'wb') as file:
    file.write(blob)
...