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

Введение

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

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

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

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

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

В следующем примере на Python рендерится первый слайд и сохраняется как PNG‑изображение:

import aspose.slides as slides

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

    with slide.get_image() as image:
        image.save("Slide_0.png", slides.ImageFormat.PNG)

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

Используйте перегрузку Slide.get_image, принимающую значение Size, чтобы отобразить слайд с точными пиксельными размерами.

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

import aspose.pydrawing as draw
import aspose.slides as slides

image_size = draw.Size(1820, 1040)

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

    with slide.get_image(image_size) as image:
        image.save("Slide_0.jpg", slides.ImageFormat.JPEG)

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

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

В следующем примере обрезанные заметки размещаются под слайдом, а комментарии — справа от него:

import aspose.pydrawing as draw
import aspose.slides as slides

scale_x = 2
scale_y = scale_x

layout_options = slides.export.NotesCommentsLayoutingOptions()
layout_options.notes_position = slides.export.NotesPositions.BOTTOM_TRUNCATED
layout_options.comments_position = slides.export.CommentsPositions.RIGHT
layout_options.comments_area_width = 500
layout_options.comments_area_color = draw.Color.antique_white

rendering_options = slides.export.RenderingOptions()
rendering_options.slides_layout_options = layout_options

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

    with slide.get_image(rendering_options, scale_x, scale_y) as image:
        image.save("Image_with_notes_and_comments_0.gif", slides.ImageFormat.GIF)

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

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

В следующем примере первый слайд рендерится как TIFF‑изображение размером 2160 × 2880 пикселей при 300 DPI:

import aspose.pydrawing as draw
import aspose.slides as slides

tiff_options = slides.export.TiffOptions()
tiff_options.image_size = draw.Size(2160, 2880)
tiff_options.dpi_x = 300
tiff_options.dpi_y = 300

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

    with slide.get_image(tiff_options) as image:
        image.save("output.tiff", slides.ImageFormat.TIFF)

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

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

В следующем примере каждый слайд рендерится как JPEG‑изображение с горизонтальными и вертикальными коэффициентами масштабирования, равными 2:

import aspose.slides as slides

scale_x = 2
scale_y = scale_x

with slides.Presentation("Presentation.pptx") as presentation:
    for index, slide in enumerate(presentation.slides):
        with slide.get_image(scale_x, scale_y) as image:
            image.save("Slide_{}.jpg".format(index), slides.ImageFormat.JPEG)

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

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

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

Метод Slide.write_as_emf записывает Slide в целевой поток в формате EMF. В следующем примере загружается презентация, выбирается первый слайд и записывается в поток файла EMF:

import aspose.slides as slides

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

    with open("Slide_0.emf", "wb") as emf_stream:
        slide.write_as_emf(emf_stream)

Вызывающая сторона владеет потоком, переданным в Slide.write_as_emf, и должна закрыть его. Aspose.Slides пишет в текущую позицию потока и оставляет поток открытым.

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

Используйте SvgImage.write_as_emf для преобразования содержимого SVG в EMF. Полученные байты можно добавить в презентацию через ImageCollection.add_image и разместить на слайде с помощью ShapeCollection.add_picture_frame.

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

import io
import aspose.slides as slides

svg_content = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100"><rect width="200" height="100" fill="#4472C4"/></svg>'
svg_image = slides.SvgImage(svg_content)

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

    with io.BytesIO() as emf_stream:
        svg_image.write_as_emf(emf_stream)
        emf_data = emf_stream.getvalue()

    image = presentation.images.add_image(emf_data)
    slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 20, 20, 200, 100, image)

    presentation.save("Presentation_with_emf.pptx", slides.export.SaveFormat.PPTX)

SvgImage.write_as_emf не получает владение над целевым потоком. После записи позиция потока находится в конце сгенерированных данных. Вызовите getvalue, чтобы получить полный буфер независимо от текущей позиции потока, как показано выше. Держите поток открытым, пока данные не будут прочитаны, и затем закройте его.

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

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

FAQ

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

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

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

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

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

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