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 Moderna. Los métodos que utilizan aspose.pydrawing.Image y aspose.pydrawing.Bitmap están obsoletos y serán reemplazados por sus equivalentes de la API Moderna. Los métodos que utilizan 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á prevista para la versión 24.8.

API Moderna

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

Un escenario típico de uso de 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 Moderna

Para una transición más sencilla, la nueva clase IImage replica las API separadas de las clases Image y Bitmap. En la mayoría de los casos, solo es necesario reemplazar las llamadas a los métodos que utilizan aspose.pydrawing por sus equivalentes de la API Moderna.

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 Moderna:

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 Moderna:

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 Moderna:

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)

Añadir 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 Moderna:

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 Modernos

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) Se eliminará completamente
save(fname, format, options, response, show_inline) Se eliminará completamente
print() Se eliminará completamente
print(printer_settings) Se eliminará completamente
print(printer_name) Se eliminará completamente
print(printer_settings, pres_name) Se eliminará completamente

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) Se eliminará completamente
render_to_graphics(options, graphics, scale_x, scale_y) Se eliminará completamente
render_to_graphics(options, graphics, rendering_size) Se eliminará completamente

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 API para aspose.pydrawing.Graphics Será Descontinuado

Los métodos que utilizan 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 se eliminarán 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 de Graphics se elimina de la API pública para unificar el trabajo con renderizado e imágenes, eliminar dependencias específicas de la 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 Moderna 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 escenario, pero funcionalmente los reemplazos son equivalentes.