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