Extraire des images des formes de présentation en Python
Extraire des images des formes
Les images sont souvent ajoutées aux formes et sont également fréquemment utilisées comme arrière‑plans des diapositives. Les objets image sont ajoutés via IImageCollection, qui est une collection d’objets IPPImage.
Cet article explique comment extraire les images ajoutées aux présentations.
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.