Convertir diapositivas de presentación a imágenes en Python
Introducción
Aspose.Slides for Python via Java puede renderizar diapositivas individuales de presentaciones PowerPoint y OpenDocument como PNG, JPEG, GIF, TIFF y otros formatos de imagen.
Para convertir una diapositiva en una imagen, siga estos pasos:
- Cargue la presentación con la clase Presentation.
- Seleccione la diapositiva que desea renderizar.
- Si es necesario, configure la renderización con la clase RenderingOptions o TiffOptions.
- Llame al método Slide.getImage. Devuelve un objeto de imagen.
- Guarde la imagen y especifique el formato de salida con un valor de ImageFormat.
Convertir una diapositiva a una imagen PNG
La conversión más sencilla utiliza la configuración de renderizado predeterminada. El objeto de imagen resultante puede procesarse en memoria o guardarse en un archivo.
El siguiente ejemplo en Python renderiza la primera diapositiva y la guarda como una imagen PNG:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ImageFormat, Presentation
presentation = Presentation("Presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
image = slide.getImage()
try:
image.save("Slide_0.png", ImageFormat.Png)
finally:
image.dispose()
finally:
presentation.dispose()
Convertir diapositivas a imágenes con tamaños personalizados
Utilice la sobrecarga de Slide.getImage que acepta un valor Dimension para renderizar una diapositiva con dimensiones de píxel exactas.
El siguiente ejemplo crea una imagen JPEG de 1820 × 1040 píxeles:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ImageFormat, Presentation
from java.awt import Dimension
image_size = Dimension(1820, 1040)
presentation = Presentation("Presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
image = slide.getImage(image_size)
try:
image.save("Slide_0.jpg", ImageFormat.Jpeg)
finally:
image.dispose()
finally:
presentation.dispose()
Convertir diapositivas con notas y comentarios a imágenes
Por defecto, las imágenes de diapositivas no incluyen notas ni comentarios. Pase un objeto NotesCommentsLayoutingOptions al método RenderingOptions.setSlidesLayoutOptions para controlar dónde aparecen las notas y los comentarios.
El siguiente ejemplo coloca notas truncadas debajo de la diapositiva y comentarios a su derecha:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import CommentsPositions, ImageFormat, NotesCommentsLayoutingOptions, NotesPositions, Presentation, RenderingOptions
from java.awt import Color
scale_x = 2.0
scale_y = scale_x
comments_area_color = Color(250, 235, 215)
layout_options = NotesCommentsLayoutingOptions()
layout_options.setNotesPosition(NotesPositions.BottomTruncated)
layout_options.setCommentsPosition(CommentsPositions.Right)
layout_options.setCommentsAreaWidth(500)
layout_options.setCommentsAreaColor(comments_area_color)
rendering_options = RenderingOptions()
rendering_options.setSlidesLayoutOptions(layout_options)
presentation = Presentation("Presentation_with_notes_and_comments.pptx")
try:
slide = presentation.getSlides().get_Item(0)
image = slide.getImage(rendering_options, scale_x, scale_y)
try:
image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif)
finally:
image.dispose()
finally:
presentation.dispose()
Warning
Para la conversión de diapositiva a imagen, no pase BottomFull al método NotesCommentsLayoutingOptions.setNotesPosition. Las notas pueden contener más texto del que el tamaño fijo de la imagen puede alojar. Use BottomTruncated en su lugar.Convertir diapositivas a imágenes usando opciones TIFF
La clase TiffOptions le permite controlar el tamaño, la resolución y otras propiedades de la imagen TIFF renderizada.
El siguiente ejemplo renderiza la primera diapositiva como una imagen TIFF de 2160 × 2880 píxeles a 300 DPI:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ImageFormat, Presentation, TiffOptions
from java.awt import Dimension
image_size = Dimension(2160, 2880)
tiff_options = TiffOptions()
tiff_options.setImageSize(image_size)
tiff_options.setDpiX(300)
tiff_options.setDpiY(300)
presentation = Presentation("sample.pptx")
try:
slide = presentation.getSlides().get_Item(0)
image = slide.getImage(tiff_options)
try:
image.save("output.tiff", ImageFormat.Tiff)
finally:
image.dispose()
finally:
presentation.dispose()
Warning
El soporte TIFF no está garantizado en versiones de Java anteriores a JDK 9.Convertir todas las diapositivas a imágenes
Itere a través de la colección de diapositivas para convertir toda la presentación en una serie de imágenes. Las diapositivas ocultas se incluyen a menos que las omita explícitamente.
El siguiente ejemplo renderiza cada diapositiva como una imagen JPEG con factores de escala horizontal y vertical de 2:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ImageFormat, Presentation
scale_x = 2.0
scale_y = scale_x
presentation = Presentation("Presentation.pptx")
try:
slide_count = presentation.getSlides().size()
for index in range(slide_count):
slide = presentation.getSlides().get_Item(index)
image = slide.getImage(scale_x, scale_y)
try:
image.save(f"Slide_{index}.jpg", ImageFormat.Jpeg)
finally:
image.dispose()
finally:
presentation.dispose()
Crear salida en Metarchivo Mejorado (EMF)
El Metarchivo Mejorado (EMF) es útil cuando se deben intercambiar gráficos vectoriales con Microsoft Office u otras aplicaciones Windows que soportan metarchivos Windows. A diferencia de una imagen basada en píxeles, un EMF puede conservar operaciones de dibujo vectorial que se escalan sin perder nitidez. Sin embargo, EMF es principalmente un formato de compatibilidad para aplicaciones con soporte de metarchivos Windows, no un formato universal de intercambio. Además, el contenido complejo de la diapositiva, como imágenes bitmap y algunos efectos, puede almacenarse como elementos rasterizados dentro del contenedor vectorial.
Exportar una diapositiva a EMF
El método Slide.writeAsEmf escribe una Slide en un flujo de destino en formato EMF. El siguiente ejemplo carga una presentación, selecciona la primera diapositiva y la escribe en un flujo de archivo EMF:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
from java.io import FileOutputStream
presentation = Presentation("Presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
emf_stream = FileOutputStream("Slide_0.emf")
try:
slide.writeAsEmf(emf_stream)
finally:
emf_stream.close()
finally:
presentation.dispose()
El llamador posee el flujo pasado a Slide.writeAsEmf y es responsable de cerrarlo, como se muestra arriba.
Convertir una imagen SVG a EMF y añadirla a una presentación
Utilice SvgImage.writeAsEmf para convertir contenido SVG a EMF. Los bytes resultantes pueden añadirse a la presentación mediante ImageCollection.addImage y colocarse en una diapositiva con ShapeCollection.addPictureFrame.
El siguiente ejemplo crea un SvgImage a partir de marcado SVG, lo convierte a un EMF en memoria, inserta el metarchivo en la primera diapositiva y guarda la presentación:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, ShapeType, SvgImage
from java.io import ByteArrayOutputStream
svg_content = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>"
svg_image = SvgImage(svg_content)
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
emf_stream = ByteArrayOutputStream()
try:
svg_image.writeAsEmf(emf_stream)
emf_data = emf_stream.toByteArray()
image = presentation.getImages().addImage(emf_data)
slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image)
finally:
emf_stream.close()
presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
SvgImage.writeAsEmf no adquiere la propiedad del flujo de destino. Un ByteArrayOutputStream almacena todos los datos generados en memoria, por lo que no es necesario restablecer la posición antes de llamar a ByteArrayOutputStream.toByteArray. El arreglo de bytes devuelto sigue siendo válido después de cerrar el flujo.
La generación de EMF está disponible en los sistemas operativos soportados por la configuración seleccionada de Aspose.Slides for Python via Java y JDK, pero la renderización puede variar entre plataformas cuando faltan fuentes o dependencias gráficas. Instale las fuentes utilizadas por el contenido origen o configure sustituciones adecuadas, siga los requisitos de plataforma para Aspose.Slides for Python via Java y valide el resultado en la aplicación que consuma EMF. Las aplicaciones Linux y macOS a menudo tienen soporte limitado o inconsistente para mostrar y editar metarchivos Windows.
Renderizado de Emoji a color
Note
Para renderizar correctamente emojis a color al convertir diapositivas de presentación en imágenes, las fuentes de emoji utilizadas en la presentación deben estar instaladas y disponibles en el sistema que realiza la conversión. Por ejemplo, si la presentación usa Segoe UI Emoji y esa fuente falta, los emojis pueden aparecer en monocromo en las imágenes de salida.Preguntas frecuentes
¿Aspose.Slides admite renderizar diapositivas con animaciones?
No. El método Slide.getImage renderiza una imagen estática de la diapositiva y no exporta animaciones.
¿Se pueden exportar como imágenes las diapositivas ocultas?
Sí. Las diapositivas ocultas pueden renderizarse como diapositivas normales. Inclúyalas en el bucle de procesamiento, como se muestra en el ejemplo anterior.
¿Se conservan sombras y otros efectos en las imágenes de diapositivas?
Sí. Aspose.Slides renderiza sombras, transparencias y otros efectos gráficos compatibles en las imágenes de las diapositivas.