Улучшите обработку изображений с Modern API

Введение

Публичный API Aspose.Slides для Python в настоящее время зависит от следующих типов aspose.pydrawing:

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

Начиная с версии 24.4, этот публичный API не рекомендуется к использованию из‑за изменений в публичном API Aspose.Slides для Python.

Чтобы избавиться от aspose.pydrawing в публичном API, мы ввели Modern API. Методы, использующие aspose.pydrawing.Image и aspose.pydrawing.Bitmap, устарели и будут заменены их современными эквивалентами. Методы, использующие aspose.pydrawing.Graphics, устарели, и поддержка их будет удалена из публичного API.

Удаление устаревшего API, зависящего от aspose.pydrawing, запланировано для выпуска 24.8.

Modern API

В публичный API добавлены следующие классы и перечисления:

  • aspose.slides.IImage — представляет растровое или векторное изображение.
  • aspose.slides.ImageFormat — представляет формат файла изображения.
  • aspose.slides.Images — предоставляет методы для создания и работы с IImage.

Типичный сценарий использования нового API выглядит так:

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)

Заменить старый код Modern API

Для более лёгкого перехода новый интерфейс IImage отражает отдельные API классов Image и Bitmap. В большинстве случаев достаточно заменить вызовы методов, использующих aspose.pydrawing, их современными эквивалентами.

Получить миниатюру слайда

Устаревший API:

import aspose.slides as slides

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

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

Современный API:

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")

Получить миниатюру фигуры

Устаревший API:

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:

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")

Получить миниатюру презентации

Устаревший API:

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:

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)

Добавить изображение в презентацию

Устаревший API:

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:

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)

Методы и свойства, которые будут удалены, и их современные замены

Класс Presentation

Подпись метода Подпись заменяющего метода
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) Будет полностью удалён
save(fname, format, options, response, show_inline) Будет полностью удалён
print() Будет полностью удалён
print(printer_settings) Будет полностью удалён
print(printer_name) Будет полностью удалён
print(printer_settings, pres_name) Будет полностью удалён

Класс Slide

Подпись метода Подпись заменяющего метода
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) Будет полностью удалён
render_to_graphics(options, graphics, scale_x, scale_y) Будет полностью удалён
render_to_graphics(options, graphics, rendering_size) Будет полностью удалён

Класс Shape

Подпись метода Подпись заменяющего метода
get_thumbnail() get_image()
get_thumbnail(bounds, scale_x, scale_y) get_image(bounds, scale_x, scale_y)

Класс ImageCollection

Подпись метода Подпись заменяющего метода
add_image(image: aspose.pydrawing.Image) add_image(image)

Класс PPImage

Подпись метода/свойства Подпись заменяющего метода/свойства
replace_image(new_image: aspose.pydrawing.Image) replace_image(new_image)
system_image image

Класс ImageWrapperFactory

Подпись метода Подпись заменяющего метода
create_image_wrapper(image: aspose.pydrawing.Image) create_image_wrapper(image)

Класс PatternFormat

Подпись метода Подпись заменяющего метода
get_tile_image(background, foreground) get_tile(background, foreground)
get_tile_image(style_color) get_tile(style_color)

Класс IPatternFormatEffectiveData

Подпись метода Подпись заменяющего метода
get_tile_image(background, foreground) get_tile_i_image(background, foreground)

Класс Output

Подпись метода Подпись заменяющего метода
add(path, image: aspose.pydrawing.Image) add(path, image)

Поддержка aspose.pydrawing.Graphics будет прекращена

Методы, использующие aspose.pydrawing.Graphics, устарели; поддержка их будет удалена из публичного API.

Элементы API, зависящие от aspose.pydrawing.Graphics и подлежащие удалению:

  • 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)

FAQ

Почему был удалён aspose.pydrawing.Graphics?

Поддержка Graphics удаляется из публичного API для унификации работы с рендерингом и изображениями, устранения привязки к платформо‑специфическим зависимостям и перехода к кросс‑платформенному подходу с помощью IImage. Все методы рендеринга в Graphics будут удалены.

Какова практическая выгода от IImage по сравнению с Image/Bitmap?

IImage объединяет работу как с растровыми, так и с векторными изображениями, упрощает сохранение в различные форматы через ImageFormat, снижает зависимость от pydrawing и делает код более портируемым между средами.

Влияет ли Modern API на производительность создания миниатюр?

Переход от get_thumbnail к get_image не ухудшает сценарии: новые методы предоставляют те же возможности по созданию изображений с опциями и размерами, сохраняя поддержку параметров рендеринга. Конкретный прирост или падение зависит от сценария, но функционально замены эквивалентны.