Извлечение изображений из файла презентации - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над пакетом python-pptx.Для моего кода мне нужно извлечь все изображения, которые присутствуют внутри файла презентации.Кто-нибудь может мне помочь через это?

Заранее спасибо за помощь.

мой код выглядит так:

import pptx

prs = pptx.Presentation(filename)

for slide in prs.slides:
    for shape in slide.shapes:
        print(shape.shape_type)

при использовании shape_type он показывает PICTURE (13), присутствующий в ppt.Но я хочу, чтобы картинки извлекались в папке, где присутствует код.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

A Picture (форма) объект в python-pptx обеспечивает доступ к отображаемому изображению:

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

def iter_picture_shapes(prs):
    for slide in prs.slides:
        for shape in slide.shapes:
            if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
                yield shape

for picture in iter_picture_shapes(Presentation(filename)):
    image = picture.image
    # ---get image "file" contents---
    image_bytes = image.blob
    # ---make up a name for the file, e.g. 'image.jpg'---
    image_filename = 'image.%s' % image.ext
    with open(image_filename, 'wb') as f:
        f.write(image_bytes)

Создание уникального имени файла оставлено вам в качестве упражнения.Все остальные нужные вам биты находятся здесь.

Более подробная информация об объекте Image доступна в документации здесь:
https://python -pptx.readthedocs.io / en / latest /апи / image.html # изображения-объекты

0 голосов
/ 19 декабря 2018

Решение от scanny не сработало, потому что у меня были элементы изображения в элементах группы.Это сработало для меня:

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

n=0
def write_image(shape):
    global n
    image = shape.image
    # ---get image "file" contents---
    image_bytes = image.blob
    # ---make up a name for the file, e.g. 'image.jpg'---
    image_filename = 'image{:03d}.{}'.format(n, image.ext)
    n += 1
    print(image_filename)
    with open(image_filename, 'wb') as f:
        f.write(image_bytes)

def visitor(shape):
    if shape.shape_type == MSO_SHAPE_TYPE.GROUP:
        for s in shape.shapes:
            visitor(s)
    if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
        write_image(shape)

def iter_picture_shapes(prs):
    for slide in prs.slides:
        for shape in slide.shapes:
            visitor(shape)

iter_picture_shapes(Presentation(filename))
0 голосов
/ 25 сентября 2018

Используйте это PPTExtractor repo для справки.

ppt = PPTExtractor("some/PowerPointFile")
# found images
len(ppt)
# image list
images = ppt.namelist()
# extract image
ppt.extract(images[0])

# save image with different name
ppt.extract(images[0], "nuevo-nombre.png")
# extract all images
ppt.extractall()

Сохранение изображений в другом каталоге:

ppt.extract("image.png", path="/another/directory")
ppt.extractall(path="/another/directory")
...