Преобразование слайдов презентации в изображения на Python
Введение
Aspose.Slides for Python via Java может визуализировать отдельные слайды из презентаций PowerPoint и OpenDocument в форматах PNG, JPEG, GIF, TIFF и других форматов изображений.
Чтобы преобразовать слайд в изображение, выполните следующие действия:
- Загрузите презентацию с помощью класса Presentation.
- Выберите слайд, который вы хотите визуализировать.
- При необходимости настройте визуализацию с помощью класса RenderingOptions или TiffOptions.
- Вызовите метод Slide.getImage. Он возвращает объект изображения.
- Сохраните изображение и укажите формат вывода с помощью значения 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()
Warning
Для преобразования слайдов в изображения не передавайте BottomFull методу NotesCommentsLayoutingOptions.setNotesPosition. Заметки могут содержать больше текста, чем может вместить фиксированный размер изображения. Вместо этого используйте BottomTruncated.Преобразовать слайды в изображения с использованием 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()
Warning
Поддержка TIFF не гарантируется в версиях Java ранее JDK 9.Преобразовать все слайды в изображения
Пройдите по коллекции слайдов, чтобы преобразовать всю презентацию в серию изображений. Скрытые слайды включаются, если вы явно не пропустите их.
Следующий пример визуализирует каждый слайд как 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.
Отображение цветных эмодзи
Note
Для корректного отображения цветных эмодзи при преобразовании слайдов презентации в изображения шрифты эмодзи, используемые в презентации, должны быть установлены и доступны системе, выполняющей преобразование. Например, если презентация использует Segoe UI Emoji, а этот шрифт отсутствует, эмодзи могут отображаться монохромно в конечных изображениях.FAQ
Поддерживает ли Aspose.Slides визуализацию слайдов с анимациями?
Нет. Метод Slide.getImage визуализирует статическое изображение слайда и не экспортирует анимации.
Можно ли экспортировать скрытые слайды в виде изображений?
Да. Скрытые слайды могут быть визуализированы так же, как обычные слайды. Включите их в цикл обработки, как показано в примере выше.
Сохраняются ли тени и другие эффекты на изображениях слайдов?
Да. Aspose.Slides визуализирует тени, прозрачность и другие поддерживаемые графические эффекты в изображениях слайдов.