Mejorar el procesamiento de imágenes con la API Moderna

Introducción

La API pública de Aspose.Slides para Python depende actualmente de los siguientes tipos aspose.pydrawing:

  • aspose.pydrawing.Graphics
  • aspose.pydrawing.Image
  • aspose.pydrawing.Bitmap
  • aspose.pydrawing.printing.PrinterSettings

A partir de la versión 24.4, esta API pública está obsoleta debido a cambios en la API pública de Aspose.Slides para Python.

Para eliminar aspose.pydrawing de la API pública, introdujimos la API Modernizada. Los métodos que usan aspose.pydrawing.Image y aspose.pydrawing.Bitmap están obsoletos y serán reemplazados por sus equivalentes de la API Modernizada. Los métodos que usan aspose.pydrawing.Graphics están obsoletos, y su soporte será eliminado de la API pública.

La eliminación de la API obsoleta que depende de aspose.pydrawing está programada para la versión 24.8.

API Modernizada

Se han añadido las siguientes clases y enumeraciones a la API pública:

Un escenario típico de uso para la nueva API se ve así:

import aspose.slides as slides
import aspose.pydrawing as drawing

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("image.png") as image:
        pp_image = presentation.images.add_image(image)

    slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 10, 10, 100, 100, pp_image)

    with slide.get_image(drawing.Size(1920, 1080)) as slide_image:
        slide_image.save("slide1.jpeg", slides.ImageFormat.JPEG)

Reemplazar el Código Antiguo con la API Modernizada

Para una transición más fácil, la nueva interfaz IImage refleja las API separadas de las clases Image y Bitmap. En la mayoría de los casos, solo necesitas reemplazar las llamadas a métodos que usan aspose.pydrawing por sus equivalentes de la API Modernizada.

Obtener una Miniatura de Diapositiva

API obsoleta:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    slide.get_thumbnail().save("slide1.png")

API Modernizada:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    with slide.get_image() as image:
        image.save("slide1.png")

Obtener una Miniatura de Forma

API obsoleta:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    
    shape.get_thumbnail().save("shape.png")

API Modernizada:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    with shape.get_image() as image:
        image.save("shape.png")

Obtener una Miniatura de Presentación

API obsoleta:

import aspose.slides as slides
import aspose.pydrawing as drawing

with slides.Presentation("sample.pptx") as presentation:
    thumbnails = presentation.get_thumbnails(slides.export.RenderingOptions(), drawing.Size(1980, 1028))

    for index, thumbnail in enumerate(thumbnails):
        thumbnail.save(f"slide_{index}.png", drawing.imaging.ImageFormat.png)

API Modernizada:

import aspose.slides as slides
import aspose.pydrawing as drawing

with slides.Presentation("sample.pptx") as presentation:
    thumbnails = presentation.get_images(slides.export.RenderingOptions(), drawing.Size(1980, 1028))

    for index, thumbnail in enumerate(thumbnails):
        thumbnail.save(f"slide_{index}.png", slides.ImageFormat.PNG)

Agregar una Imagen a una Presentación

API obsoleta:

import aspose.slides as slides
import aspose.pydrawing as drawing

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    image = drawing.Image.from_file("image.png")
    pp_image = presentation.images.add_image(image)
    slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 10, 10, 100, 100, pp_image)

API Modernizada:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("image.png") as image:
        pp_image = presentation.images.add_image(image)

    slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 10, 10, 100, 100, pp_image)

Métodos y Propiedades que se Eliminarán y sus Reemplazos Modernizados

Clase Presentation

Firma del Método Firma del Método de Reemplazo
get_thumbnails(options) get_images(options)
get_thumbnails(options, slides) get_images(options, slides)
get_thumbnails(options, scale_x, scale_y) get_images(options, scale_x, scale_y)
get_thumbnails(options, slides, scale_x, scale_y) get_images(options, slides, scale_x, scale_y)
get_thumbnails(options, image_size) get_images(options, image_size)
get_thumbnails(options, slides, image_size) get_images(options, slides, image_size)
save(fname, format, response, show_inline) Will be deleted completely
save(fname, format, options, response, show_inline) Will be deleted completely
print() Will be deleted completely
print(printer_settings) Will be deleted completely
print(printer_name) Will be deleted completely
print(printer_settings, pres_name) Will be deleted completely

Clase Slide

Firma del Método Firma del Método de Reemplazo
get_thumbnail() get_image()
get_thumbnail(scale_x, scale_y) get_image(scale_x, scale_y)
get_thumbnail(image_size) get_image(image_size)
get_thumbnail(options) get_image(options: ITiffOotions)
get_thumbnail(options) get_image(options: IRenderingOptions)
get_thumbnail(options, scale_x, scale_y) get_image(options, scale_x, scale_y)
get_thumbnail(options, image_size) get_image(options, image_size)
render_to_graphics(options, graphics) Will be deleted completely
render_to_graphics(options, graphics, scale_x, scale_y) Will be deleted completely
render_to_graphics(options, graphics, rendering_size) Will be deleted completely

Clase Shape

Firma del Método Firma del Método de Reemplazo
get_thumbnail() get_image()
get_thumbnail(bounds, scale_x, scale_y) get_image(bounds, scale_x, scale_y)

Clase ImageCollection

Firma del Método Firma del Método de Reemplazo
add_image(image: aspose.pydrawing.Image) add_image(image)

Clase PPImage

Firma del Método/Propiedad Firma del Método/Propiedad de Reemplazo
replace_image(new_image: aspose.pydrawing.Image) replace_image(new_image)
system_image image

Clase ImageWrapperFactory

Firma del Método Firma del Método de Reemplazo
create_image_wrapper(image: aspose.pydrawing.Image) create_image_wrapper(image)

Clase PatternFormat

Firma del Método Firma del Método de Reemplazo
get_tile_image(background, foreground) get_tile(background, foreground)
get_tile_image(style_color) get_tile(style_color)

Clase IPatternFormatEffectiveData

Firma del Método Firma del Método de Reemplazo
get_tile_image(background, foreground) get_tile_i_image(background, foreground)

Clase Output

Firma del Método Firma del Método de Reemplazo
add(path, image: aspose.pydrawing.Image) add(path, image)

El Soporte de la API para aspose.pydrawing.Graphics será Descontinuado

Los métodos que usan aspose.pydrawing.Graphics están obsoletos; su soporte será eliminado de la API pública.

Los miembros de la API que dependen de aspose.pydrawing.Graphics y serán eliminados incluyen:

  • aspose.pydrawing.Slide.render_to_graphics(options, graphics)
  • aspose.pydrawing.Slide.render_to_graphics(options, graphics, scale_x, scale_y)
  • aspose.pydrawing.Slide.render_to_graphics(options, graphics, rendering_size)

Preguntas frecuentes

¿Por qué se eliminó aspose.pydrawing.Graphics?

El soporte para Graphics se elimina de la API pública para unificar el trabajo con renderizado e imágenes, eliminar dependencias específicas de plataforma y pasar a un enfoque multiplataforma con IImage. Todos los métodos de renderizado a Graphics serán eliminados.

¿Cuál es el beneficio práctico de IImage comparado con Image/Bitmap?

IImage unifica el trabajo con imágenes raster y vectoriales, simplifica el guardado en varios formatos mediante ImageFormat, reduce la dependencia de pydrawing y hace que el código sea más portátil entre entornos.

¿Afectará la API Modernizada al rendimiento de la generación de miniaturas?

Cambiar de get_thumbnail a get_image no empeora los escenarios: los nuevos métodos ofrecen las mismas capacidades para producir imágenes con opciones y tamaños, manteniendo el soporte para opciones de renderizado. La ganancia o pérdida específica depende del caso, pero funcionalmente los reemplazos son equivalentes.