Extraire des images des formes de présentation en Python

Extraire des images des formes

Pour extraire une image d’une présentation, vous devez d’abord localiser l’image en parcourant chaque diapositive, puis chaque forme. Une fois l’image trouvée ou identifiée, vous pouvez l’extraire et l’enregistrer comme un nouveau fichier. XXX

import aspose.slides as slides

def get_image_format(image_type):
    return {
        "jpeg": slides.ImageFormat.JPEG,
        "emf": slides.ImageFormat.EMF,
        "bmp": slides.ImageFormat.BMP,
        "png": slides.ImageFormat.PNG,
        "wmf": slides.ImageFormat.WMF,
        "gif": slides.ImageFormat.GIF,
    }.get(image_type, slides.ImageFormat.JPEG)

with slides.Presentation("pres.pptx") as pres:
    #Accès à la présentation
    
    slideIndex = 0
    image_type = ""
    ifImageFound = False
    for slide in pres.slides:
        slideIndex += 1
        #Accès à la première diapositive
        image_format = slides.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:
            #Obtention de l'image d'arrière-plan  
            back_image = slide.background.fill_format.picture_fill_format.picture.image
        elif slide.layout_slide.background.fill_format.fill_type == slides.FillType.PICTURE:
            #Obtention de l'image d'arrière-plan  
            back_image = slide.layout_slide.background.fill_format.picture_fill_format.picture.image
            is_layout = True

        if back_image is not None:
            #Définition du format d'image souhaité 
            image_type = back_image.content_type.split("/")[1]
            image_format = get_image_format(image_type)

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

        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.image.save(
                                file_name.format("shape_"+str(i)+"_", slideIndex, image_type), 
                                image_format)

FAQ

Puis‑je extraire l’image originale sans aucun recadrage, effet ou transformation de forme ?

Oui. Lorsque vous accédez à l’image d’une forme, vous obtenez l’objet image de la collection d’images de la présentation, c’est‑à‑dire les pixels originaux sans recadrage ni effets de style. Le processus parcourt la collection d’images de la présentation et les objets PPImage, qui stockent les données brutes.

Existe‑t‑il un risque de duplication de fichiers identiques lors de l’enregistrement de nombreuses images à la fois ?

Oui, si vous enregistrez tout sans discernement. La collection d’images d’une présentation peut contenir des données binaires identiques référencées par différentes formes ou diapositives. Pour éviter les duplications, comparez les hachages, tailles ou contenus des données extraites avant l’écriture.

Comment déterminer quelles formes sont liées à une image spécifique de la collection de la présentation ?

Aspose.Slides ne stocke pas de liens inverses de PPImage vers les formes. Créez manuellement une correspondance lors du parcours : chaque fois que vous trouvez une référence à un PPImage, enregistrez les formes qui l’utilisent.

Puis‑je extraire des images intégrées dans des objets OLE, comme des documents joints ?

Pas directement, car un objet OLE est un conteneur. Vous devez extraire le paquet OLE lui‑même, puis analyser son contenu à l’aide d’outils séparés. Les formes d’image de présentation fonctionnent via PPImage; OLE est un type d’objet différent.