Extraer imágenes de formas de presentación en Python
Extraer imágenes de formas
Las imágenes a menudo se añaden a las formas y también se usan frecuentemente como fondos de diapositivas. Los objetos de imagen se añaden a través de IImageCollection, que es una colección de objetos IPPImage.
Este artículo explica cómo extraer las imágenes añadidas a las presentaciones.
Para extraer una imagen de una presentación, debe localizar la imagen primero recorriendo cada diapositiva y luego cada forma. Una vez que la imagen se encuentre o identifique, puede extraerla y guardarla como un nuevo archivo. 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:
#Accediendo a la presentación
slideIndex = 0
image_type = ""
ifImageFound = False
for slide in pres.slides:
slideIndex += 1
#Accediendo a la primera diapositiva
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:
#Obteniendo la imagen de fondo
back_image = slide.background.fill_format.picture_fill_format.picture.image
elif slide.layout_slide.background.fill_format.fill_type == slides.FillType.PICTURE:
#Obteniendo la imagen de fondo
back_image = slide.layout_slide.background.fill_format.picture_fill_format.picture.image
is_layout = True
if back_image is not None:
#Estableciendo el formato de imagen deseado
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)
Preguntas frecuentes
¿Puedo extraer la imagen original sin recortes, efectos o transformaciones de la forma?
Sí. Cuando accede a la imagen de una forma, obtiene el objeto de imagen de la image collection de la presentación, lo que significa los píxeles originales sin recortes ni efectos de estilo. El flujo de trabajo recorre la colección de imágenes de la presentación y los objetos PPImage, que almacenan los datos sin procesar.
¿Existe el riesgo de duplicar archivos idénticos al guardar muchas imágenes a la vez?
Sí, si guarda todo indiscriminadamente. La image collection de una presentación puede contener datos binarios idénticos referenciados por diferentes formas o diapositivas. Para evitar duplicados, compare los hash, tamaños o contenidos de los datos extraídos antes de escribir.
¿Cómo puedo determinar qué formas están vinculadas a una imagen específica de la colección de la presentación?
Aspose.Slides no almacena enlaces inversos de PPImage a las formas. Construya un mapeo manualmente durante la recorrido: cada vez que encuentre una referencia a un PPImage, registre qué formas lo utilizan.
¿Puedo extraer imágenes incrustadas dentro de objetos OLE, como documentos adjuntos?
No directamente, porque un objeto OLE es un contenedor. Necesita extraer el paquete OLE y luego analizar su contenido usando herramientas separadas. Las formas de imagen de la presentación funcionan a través de PPImage; OLE es un tipo de objeto diferente.