Преобразование слайдов PowerPoint в PNG на Python

Обзор

В этой статье объясняется, как преобразовать слайды презентации в изображения PNG с помощью Aspose.Slides для Python через Java. Вы можете загружать презентации в форматах PPT, PPTX и ODP, рендерить каждый слайд и сохранять его как отдельное изображение PNG.

Ниже приведённые примеры демонстрируют рендеринг с масштабом по умолчанию, увеличение масштаба, указание размеров вывода в пикселях и выбор стиля рендеринга градиентов.

Конвертировать PowerPoint в PNG

Загрузите презентацию с помощью класса Presentation и получите доступ к её слайдам через коллекцию Presentation.getSlides. В примере каждый слайд рендерится с помощью Slide.getImage без параметров для создания миниатюры. Затем вызывается IImage.save с ImageFormat.Png для сохранения каждого отрендеренного слайда в формате PNG.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

presentation = Presentation("presentation.pptx")
try:
    for index, slide in enumerate(presentation.getSlides()):
        image = slide.getImage()
        try:
            image.save(f"slide_{index}.png", ImageFormat.Png)
        finally:
            image.dispose()
finally:
    presentation.dispose()

Конвертировать PowerPoint в PNG с пользовательскими размерами

Передайте горизонтальные и вертикальные коэффициенты масштабирования в Slide.getImage, чтобы контролировать размеры рендеринга. В этом примере оба коэффициента равны 2, поэтому слайд размером 720 × 540 пунктов создаёт изображение 1440 × 1080 пикселей. Равные коэффициенты сохраняют соотношение сторон слайда. Каждое отрендеренное изображение сохраняется в формате PNG.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

presentation = Presentation("presentation.pptx")
try:
    scale_x = 2.0
    scale_y = scale_x

    for index, slide in enumerate(presentation.getSlides()):
        image = slide.getImage(scale_x, scale_y)
        try:
            image.save(f"slide_{index}.png", ImageFormat.Png)
        finally:
            image.dispose()
finally:
    presentation.dispose()

Конвертировать PowerPoint в PNG с пользовательским размером

Чтобы указать размеры вывода в пикселях, передайте размер в Slide.getImage вместо коэффициентов масштабирования. В этом примере каждый слайд рендерится с размером 960 × 720 пикселей и сохраняется в формате PNG. Выбирайте размеры, соответствующие соотношению сторон слайда, чтобы избежать растягивания изображения.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation
from java.awt import Dimension

presentation = Presentation("presentation.pptx")
try:
    image_size = Dimension(960, 720)

    for index, slide in enumerate(presentation.getSlides()):
        image = slide.getImage(image_size)
        try:
            image.save(f"slide_{index}.png", ImageFormat.Png)
        finally:
            image.dispose()
finally:
    presentation.dispose()

Выбор стиля рендеринга градиента

Предположим, что слайд содержит градиентные заливки, но переходы в экспортированном PNG выглядят светлее или иначе, чем в PowerPoint. Вы можете использовать метод SaveOptions.setGradientStyle, унаследованный от RenderingOptions, чтобы выбрать способ рендеринга градиентов.

Скачайте gradient-styles.pptx и поместите его в рабочий каталог приложения. Первый слайд содержит два линейных градиента: от голубого к оранжевому сверху и от синего к желтому снизу. Каждый градиент имеет две остановки — на 0% и 100%.

В следующем примере эта презентация загружается и первый слайд рендерится в обоих режимах с помощью Slide.getImage.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import GradientStyle, ImageFormat, Presentation, RenderingOptions

presentation = Presentation("gradient-styles.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    gradient_styles = (GradientStyle.Default, GradientStyle.PowerPointUI)
    for style in gradient_styles:
        options = RenderingOptions()
        options.setGradientStyle(style)

        style_name = "Default" if style == GradientStyle.Default else "PowerPointUI"
        image = slide.getImage(options, 1.0, 1.0)
        try:
            image.save(f"gradient-{style_name}.png", ImageFormat.Png)
        finally:
            image.dispose()
finally:
    presentation.dispose()
Default PowerPointUI
Градиенты от цианового к оранжевому и от синего к желтому, отрендеренные с Default Те же градиенты, отрендеренные с PowerPointUI

В этом примере Default создаёт более светлые промежуточные цвета, тогда как PowerPointUI создаёт более тёмные промежуточные цвета. Разница зависит от цветов и остановок в градиенте.

Выбирайте Default, если стандартный вывод Aspose.Slides вас устраивает. Попробуйте PowerPointUI, если вашей целью является точное соответствие внешнему виду в PowerPoint. Сравните оба результата с желаемым результатом; ни один из режимов не является универсально лучшим.

FAQ

Как я могу экспортировать конкретную форму, например диаграмму или изображение, вместо всего слайда?

Aspose.Slides поддерживает создание миниатюр для отдельных фигур, позволяя рендерить фигуру в виде изображения PNG.

Поддерживается ли параллельное преобразование на сервере?

Да. Используйте отдельный экземпляр презентации для каждого потока или процесса; не делить один экземпляр между потоками.

Каковы ограничения оценки при экспорте в PNG?

Режим оценки добавляет водяной знак к выходным изображениям и применяет другие ограничения, пока лицензия не будет применена.