Преобразование слайдов презентации в изображения на Python

Введение

Aspose.Slides for Python via Java может визуализировать отдельные слайды из презентаций PowerPoint и OpenDocument в форматах PNG, JPEG, GIF, TIFF и других форматов изображений.

Чтобы преобразовать слайд в изображение, выполните следующие действия:

  1. Загрузите презентацию с помощью класса Presentation.
  2. Выберите слайд, который вы хотите визуализировать.
  3. При необходимости настройте визуализацию с помощью класса RenderingOptions или TiffOptions.
  4. Вызовите метод Slide.getImage. Он возвращает объект изображения.
  5. Сохраните изображение и укажите формат вывода с помощью значения ImageFormat.

Преобразовать слайд в PNG‑изображение

Самый простой способ преобразования использует настройки визуализации по умолчанию. Полученный объект изображения можно обработать в памяти или сохранить в файл.

Следующий пример на Python визуализирует первый слайд и сохраняет его как 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()

Преобразовать слайды в изображения с пользовательскими размерами

Используйте перегрузку Slide.getImage, принимающую значение Dimension, чтобы визуализировать слайд с точными размерами в пикселях.

Следующий пример создает JPEG‑изображение размером 1820 × 1040:

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

Преобразовать слайды с заметками и комментариями в изображения

По умолчанию изображения слайдов не включают заметки или комментарии. Передайте объект NotesCommentsLayoutingOptions методу RenderingOptions.setSlidesLayoutOptions, чтобы управлять расположением заметок и комментариев.

Следующий пример размещает усечённые заметки под слайдом и комментарии справа от него:

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

Преобразовать слайды в изображения с использованием TIFF‑опций

Класс TiffOptions позволяет управлять размером, разрешением и другими свойствами визуализируемого TIFF‑изображения.

Следующий пример визуализирует первый слайд как TIFF‑изображение размером 2160 × 2880 с разрешением 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()

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

Пройдите по коллекции слайдов, чтобы преобразовать всю презентацию в серию изображений. Скрытые слайды включаются, если вы явно не пропустите их.

Следующий пример визуализирует каждый слайд как JPEG‑изображение с горизонтальным и вертикальным коэффициентами масштабирования, равными 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()

Создание вывода в формате Enhanced Metafile

Enhanced Metafile (EMF) полезен, когда векторная графика должна быть обменена с Microsoft Office или другими приложениями Windows, поддерживающими метафайлы Windows. В отличие от растрового изображения, EMF может сохранять векторные операции рисования, которые масштабируются без потери чёткости. Однако EMF в первую очередь является форматом совместимости для приложений с поддержкой Windows‑метафайлов, а не универсальным форматом обмена. Кроме того, сложное содержимое слайдов, такое как растровые изображения и некоторые эффекты, может храниться в виде растровых элементов внутри контейнера векторного метафайла.

Экспортировать слайд в EMF

Метод Slide.writeAsEmf записывает объект Slide в целевой поток в формате EMF. Следующий пример загружает презентацию, выбирает первый слайд и записывает его в поток 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()

Вызовчик владеет потоком, переданным в Slide.writeAsEmf, и отвечает за его закрытие, как показано выше.

Преобразовать SVG‑изображение в EMF и добавить его в презентацию

Используйте SvgImage.writeAsEmf для преобразования SVG‑контента в EMF. Полученные байты можно добавить в презентацию через ImageCollection.addImage и разместить на слайде с помощью ShapeCollection.addPictureFrame.

Следующий пример создаёт SvgImage из SVG‑разметки, преобразует его в EMF в памяти, вставляет метафайл на первый слайд и сохраняет презентацию:

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 не берёт на себя владение целевым потоком. ByteArrayOutputStream сохраняет все сгенерированные данные в памяти, поэтому сброс позиции не требуется перед вызовом ByteArrayOutputStream.toByteArray. Возвращённый массив байтов остаётся действительным после закрытия потока.

Генерация EMF доступна на операционных системах, поддерживаемых выбранной конфигурацией Aspose.Slides for Python via Java и JDK, однако визуализация может различаться между платформами при отсутствии шрифтов или графических зависимостей. Установите шрифты, используемые в исходном содержимом, или настройте подходящие замены, следуйте требованиям платформы для Aspose.Slides for Python via Java и проверьте результат в целевом приложении, потребляющем EMF. Приложения Linux и macOS часто имеют ограниченную или непоследовательную поддержку отображения и редактирования метафайлов Windows.

Отображение цветных эмодзи

FAQ

Поддерживает ли Aspose.Slides визуализацию слайдов с анимациями?

Нет. Метод Slide.getImage визуализирует статическое изображение слайда и не экспортирует анимации.

Можно ли экспортировать скрытые слайды в виде изображений?

Да. Скрытые слайды могут быть визуализированы так же, как обычные слайды. Включите их в цикл обработки, как показано в примере выше.

Сохраняются ли тени и другие эффекты на изображениях слайдов?

Да. Aspose.Slides визуализирует тени, прозрачность и другие поддерживаемые графические эффекты в изображениях слайдов.