Применение анимаций фигур в презентациях с Python

Анимации — это визуальные эффекты, которые можно применять к тексту, изображениям, фигурам или диаграммам. Они придают жизнь презентациям или их компонентам.

Зачем использовать анимацию в презентациях?

Используя анимацию, вы можете

  • контролировать поток информации
  • подчёркивать важные моменты
  • повышать интерес или вовлечённость аудитории
  • делать контент более лёгким для чтения, усвоения или обработки
  • привлекать внимание читателей или зрителей к важным частям презентации

PowerPoint предоставляет множество вариантов и инструментов для анимаций и анимационных эффектов в категориях вход, выход, акцент и траектории движения.

Анимации в Aspose.Slides

  • Aspose.Slides предоставляет классы и типы, необходимые для работы с анимациями в пространстве имён Aspose.Slides.Animation.
  • Aspose.Slides предоставляет более 150 анимационных эффектов в перечислении EffectType. Эти эффекты по существу такие же (или эквивалентные) эффекты, используемые в PowerPoint.

Применение анимации к TextBox

Aspose.Slides для Python через .NET позволяет применять анимацию к тексту в фигуре.

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте rectangle IAutoShape.
  4. Добавьте текст в IAutoShape.TextFrame.
  5. Получите основную последовательность эффектов.
  6. Добавьте анимационный эффект к IAutoShape.
  7. Установите свойство TextAnimation.BuildType в значение из перечисления BuildType.
  8. Запишите презентацию на диск в виде файла PPTX.

Этот код на Python показывает, как применить эффект Fade к AutoShape и установить анимацию текста со значением By 1st Level Paragraphs:

import aspose.slides as slides

# Создает экземпляр класса презентации, представляющего файл презентации.
with slides.Presentation() as pres:
    sld = pres.slides[0]
    
    # Добавляет новую AutoShape с текстом
    autoShape = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 150, 100)

    textFrame = autoShape.text_frame
    textFrame.text = "First paragraph \nSecond paragraph \n Third paragraph"

    # Получает основную последовательность слайда.
    sequence = sld.timeline.main_sequence

    # Добавляет эффект анимации Fade к фигуре
    effect = sequence.add_effect(autoShape, slides.animation.EffectType.FADE, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)

    # Анимирует текст фигуры по абзацам первого уровня
    effect.text_animation.build_type = slides.animation.BuildType.BY_LEVEL_PARAGRAPHS1

    # Сохраняет файл PPTX на диск
    pres.save("AnimText_out.pptx", slides.export.SaveFormat.PPTX)

Применение анимации к PictureFrame

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте или получите PictureFrame на слайде.
  4. Получите основную последовательность эффектов.
  5. Добавьте анимационный эффект к PictureFrame.
  6. Запишите презентацию на диск в виде файла PPTX.

Этот код на Python показывает, как применить эффект Fly к кадру изображения:

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


# Создает экземпляр класса презентации, представляющего файл презентации.
with slides.Presentation() as pres:
    # Загружает изображение, которое будет добавлено в коллекцию изображений презентации
    img = draw.Bitmap("aspose-logo.jpg")
    image = pres.images.add_image(img)

    # Добавляет рамку изображения на слайд
    picFrame = pres.slides[0].shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)

    # Получает основную последовательность слайда.
    sequence = pres.slides[0].timeline.main_sequence

    # Добавляет эффект анимации Fly слева к рамке изображения
    effect = sequence.add_effect(picFrame, slides.animation.EffectType.FLY,  
        slides.animation.EffectSubtype.LEFT, 
        slides.animation.EffectTriggerType.ON_CLICK)

    # Сохраняет файл PPTX на диск
    pres.save("AnimImage_out.pptx", slides.export.SaveFormat.PPTX)

Применение анимации к Shape

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте rectangle IAutoShape.
  4. Добавьте Bevel IAutoShape (при щелчке по этому объекту анимация воспроизводится).
  5. Создайте последовательность эффектов для фигуры с фаской.
  6. Создайте пользовательский UserPath.
  7. Добавьте команды перемещения к UserPath.
  8. Запишите презентацию на диск в виде файла PPTX.

Этот код на Python показывает, как применить эффект PathFootball (путь «футбол») к фигуре:

import aspose.slides.animation as anim
import aspose.slides as slides
import aspose.pydrawing as draw

# Создает экземпляр класса Presentation, представляющего файл PPTX
with slides.Presentation() as pres:
    sld = pres.slides[0]

    # Создает эффект PathFootball для существующей фигуры с нуля.
    ashp = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 150, 250, 25)

    ashp.add_text_frame("Animated TextBox")

    # Добавляет анимационный эффект PathFootBall.
    pres.slides[0].timeline.main_sequence.add_effect(ashp, 
        anim.EffectType.PATH_FOOTBALL,
        anim.EffectSubtype.NONE, 
        anim.EffectTriggerType.AFTER_PREVIOUS)

    # Создает некую "кнопку".
    shapeTrigger = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.BEVEL, 10, 10, 20, 20)

    # Создает последовательность эффектов для кнопки.
    seqInter = pres.slides[0].timeline.interactive_sequences.add(shapeTrigger)

    # Создает пользовательский путь. Наш объект будет перемещён только после нажатия кнопки.
    fxUserPath = seqInter.add_effect(ashp, 
        anim.EffectType.PATH_USER, 
        anim.EffectSubtype.NONE, 
        anim.EffectTriggerType.ON_CLICK)

    # Добавляет команды перемещения, так как созданный путь пуст.
    motionBhv = fxUserPath.behaviors[0]

    pts = [draw.PointF(0.076, 0.59)]
    motionBhv.path.add(anim.MotionCommandPathType.LINE_TO, pts, anim.MotionPathPointsType.AUTO, True)
    pts = [draw.PointF(-0.076, -0.59)]
    motionBhv.path.add(anim.MotionCommandPathType.LINE_TO, pts, anim.MotionPathPointsType.AUTO, False)
    motionBhv.path.add(anim.MotionCommandPathType.END, None, anim.MotionPathPointsType.AUTO, False)

    # Записывает файл PPTX на диск
    pres.save("AnimExample_out.pptx", slides.export.SaveFormat.PPTX)

Получение анимационных эффектов, применённых к Shape

Ниже приведены примеры, показывающие, как использовать метод get_effects_by_shape из класса Sequence для получения всех анимационных эффектов, применённых к фигуре.

Пример 1: Получить анимационные эффекты, применённые к фигуре на обычном слайде

Ранее вы узнали, как добавлять анимационные эффекты к фигурам в презентациях PowerPoint. Следующий пример кода демонстрирует, как получить эффекты, применённые к первой фигуре на первом обычном слайде в презентации AnimExample_out.pptx.

import aspose.slides as slides

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

    # Получает основную последовательность анимации слайда.
    sequence = first_slide.timeline.main_sequence

    # Получает первую фигуру на первом слайде.
    shape = first_slide.shapes[0]

    # Получает анимационные эффекты, применённые к фигуре.
    shape_effects = sequence.get_effects_by_shape(shape)

    if len(shape_effects) > 0:
        print("The shape", shape.name, "has", len(shape_effects), "animation effects.")

Пример 2: Получить все анимационные эффекты, включая наследованные из заполнителей

Если фигура на обычном слайде имеет заполнители, расположенные на слайде‑макете и/или мастере, и к этим заполнителям добавлены анимационные эффекты, то все эффекты фигуры будут воспроизводиться во время показа, включая унаследованные из заполнителей.

Предположим, у нас есть файл презентации PowerPoint sample.pptx с одним слайдом, содержащим только фигуру нижнего колонтитула с текстом «Made with Aspose.Slides», к которой применён эффект Random Bars.

Эффект анимации фигуры на слайде

Предположим также, что к заполнителю нижнего колонтитула на макете применён эффект Split.

Эффект анимации фигуры на макете

И, наконец, к заполнителю нижнего колонтитула на мастере применён эффект Fly In.

Эффект анимации фигуры на мастере

Следующий пример кода показывает, как использовать метод get_base_placeholder из класса Shape для доступа к заполнителям фигуры и получения анимационных эффектов, применённых к фигуре нижнего колонтитула, включая унаследованные из заполнителей, расположенных на макете и мастере.

import aspose.slides as slides

def print_effects(effects):
    for effect in effects:
        print(effect.type.name, effect.subtype.name)
with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    # Получить анимационные эффекты фигуры на обычном слайде.
    shape = slide.shapes[0]
    shape_effects = slide.timeline.main_sequence.get_effects_by_shape(shape)

    # Получить анимационные эффекты заполнителя на слайде макета.
    layout_shape = shape.get_base_placeholder()
    layout_shape_effects = slide.layout_slide.timeline.main_sequence.get_effects_by_shape(layout_shape)

    # Получить анимационные эффекты заполнителя на слайде мастера.
    master_shape = layout_shape.get_base_placeholder()
    master_shape_effects = slide.layout_slide.master_slide.timeline.main_sequence.get_effects_by_shape(master_shape)

    print("Main sequence of shape effects:")
    print_effects(master_shape_effects)
    print_effects(layout_shape_effects)
    print_effects(shape_effects)

Output:

Main sequence of shape effects:
FLY BOTTOM
SPLIT VERTICAL_IN
RANDOM_BARS HORIZONTAL

Изменение свойств тайминга анимационных эффектов

Aspose.Slides для Python через .NET позволяет изменять свойства тайминга анимационного эффекта.

Это панель тайминга анимации в Microsoft PowerPoint:

example1_image

Соответствия между таймингом PowerPoint и свойствами Effect.Timing:

  • Выпадающий список Start в PowerPoint соответствует свойству Effect.Timing.TriggerType.
  • Параметр Duration соответствует свойству Effect.Timing.Duration. Длительность анимации (в секундах) — это общее время, за которое анимация завершает один цикл.
  • Параметр Delay соответствует свойству Effect.Timing.TriggerDelayTime.

Как изменить свойства тайминга эффекта:

  1. Примените или получите анимационный эффект.
  2. Установите новые значения нужных вам свойств Effect.Timing.
  3. Сохраните изменённый файл PPTX.

Этот код на Python демонстрирует операцию:

import aspose.slides as slides

# Создает экземпляр класса презентации, представляющего файл презентации.
with slides.Presentation("AnimExample_out.pptx") as pres:
    # Получает основную последовательность слайда.
    sequence = pres.slides[0].timeline.main_sequence

    # Получает первый эффект основной последовательности.
    effect = sequence[0]

    # Изменяет TriggerType эффекта, чтобы запускать по щелчку
    effect.timing.trigger_type = slides.animation.EffectTriggerType.ON_CLICK

    # Изменяет длительность эффекта
    effect.timing.duration = 3

    # Изменяет время задержки запуска эффекта
    effect.timing.trigger_delay_time = 0.5

    # Сохраняет файл PPTX на диск
    pres.save("AnimExample_changed.pptx", slides.export.SaveFormat.PPTX)

Звук анимационного эффекта

Aspose.Slides предоставляет следующие свойства для работы со звуками в анимационных эффектах:

  • sound
  • stop_previous_sound

Добавить звук анимационного эффекта

Этот код на Python показывает, как добавить звук к анимационному эффекту и остановить его, когда начинается следующий эффект:

import aspose.slides as slides

with Presentation("AnimExample_out.pptx") as pres:
    # Добавляет аудио в коллекцию аудио презентации
    effect_sound = pres.audios.add_audio(open("sampleaudio.wav", "rb").read())

    first_slide = pres.slides[0]

    # Получает основную последовательность слайда.
    sequence = first_slide.timeline.main_sequence

    # Получает первый эффект основной последовательности
    first_effect = sequence[0]

    # Проверяет эффект на отсутствие звука
    if not first_effect.stop_previous_sound and first_effect.sound is None:
        # Добавляет звук к первому эффекту
        first_effect.sound = effect_sound

    # Получает первую интерактивную последовательность слайда.
    interactive_sequence = first_slide.timeline.interactive_sequences[0]

    # Устанавливает флаг эффекта "Stop previous sound"
    interactive_sequence[0].stop_previous_sound = True

    # Записывает файл PPTX на диск
    pres.save("AnimExample_Sound_out.pptx", slides.export.SaveFormat.PPTX)

Извлечь звук анимационного эффекта

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Получите основную последовательность эффектов.
  4. Извлеките встроенный в каждый анимационный эффект sound.

Этот код на Python показывает, как извлечь звук, встроенный в анимационный эффект:

import aspose.slides as slides

# Создает экземпляр класса презентации, представляющего файл презентации.
with slides.Presentation("EffectSound.pptx") as presentation:
    slide = presentation.slides[0]

    # Получает основную последовательность слайда.
    sequence = slide.timeline.main_sequence

    for effect in sequence:
        if effect.sound is None:
            continue

        # Извлекает звук эффекта в виде массива байтов
        audio = effect.sound.binary_data

После анимации

Aspose.Slides для .NET позволяет изменять свойство After animation анимационного эффекта.

Это панель анимационного эффекта и расширенное меню в Microsoft PowerPoint:

example1_image

Выпадающий список After animation в PowerPoint соответствует следующим свойствам:

  • свойство after_animation_type, которое описывает тип After animation:
    • Пункт More Colors соответствует типу COLOR;
    • Пункт Don’t Dim соответствует типу DO_NOT_DIM (тип по умолчанию);
    • Пункт Hide After Animation соответствует типу HIDE_AFTER_ANIMATION;
    • Пункт Hide on Next Mouse Click соответствует типу HIDE_ON_NEXT_MOUSE_CLICK;
  • свойство after_animation_color, которое задаёт цвет после анимации. Это свойство работает совместно с типом COLOR. При изменении типа на другой цвет после анимации будет очищен.

Этот код на Python показывает, как изменить эффект After animation:

import aspose.slides as slides

# Создает экземпляр класса презентации, представляющего файл презентации
with slides.Presentation("AnimImage_out.pptx") as pres:
    first_slide = pres.slides[0]

    # Получает первый эффект основной последовательности
    first_effect = first_slide.timeline.main_sequence[0]

    # Изменяет тип after animation на Color
    first_effect.after_animation_type = AfterAnimationType.COLOR

    # Устанавливает цвет затемнения after animation
    first_effect.after_animation_color.color = Color.alice_blue

    # Сохраняет файл PPTX на диск
    pres.save("AnimImage_AfterAnimation.pptx", slides.export.SaveFormat.PPTX)

Анимировать текст

Aspose.Slides предоставляет следующие свойства для работы с блоком Animate text анимационного эффекта:

  • animate_text_type, который описывает тип анимации текста. Текст фигуры может быть анимирован:
  • delay_between_text_parts задаёт задержку между частями анимированного текста (словами или буквами). Положительное значение указывает процент от длительности эффекта, отрицательное — задержку в секундах.

Как изменить свойства Animate text эффекта:

  1. Примените или получите анимационный эффект.
  2. Установите свойство build_type в значение AS_ONE_OBJECT, чтобы отключить режим By Paragraphs.
  3. Установите новые значения для свойств animate_text_type и delay_between_text_parts.
  4. Сохраните изменённый файл PPTX.

Этот код на Python демонстрирует операцию:

import aspose.slides as slides

with slides.Presentation("AnimTextBox_out.pptx") as pres:
    first_slide = pres.slides[0]

    # Получает первый эффект основной последовательности
    first_effect = first_slide.timeline.main_sequence[0]

    # Изменяет тип текстовой анимации эффекта на "As One Object"
    first_effect.text_animation.build_type = slides.animation.BuildType.AS_ONE_OBJECT

    # Изменяет тип анимации текста эффекта на "By word"
    first_effect.animate_text_type = slides.animation.AnimateTextType.BY_WORD

    # Устанавливает задержку между словами на 20% от длительности эффекта
    first_effect.delay_between_text_parts = 20

    # Сохраняет файл PPTX на диск
    pres.save("AnimTextBox_AnimateText.pptx", slides.export.SaveFormat.PPTX)

FAQ

Как обеспечить сохранение анимаций при публикации презентации в веб?

Export to HTML5 и включить соответствующие options для анимаций shape и transition. Обычный HTML не воспроизводит анимацию слайдов, тогда как HTML5 — воспроизводит.

Как изменение порядка слоёв (z‑order) фигур влияет на анимацию?

Порядок анимации и порядок отрисовки независимы: эффект управляет временем и типом появления/исчезновения, а z-order определяет, что покрывает что. Видимый результат формируется их комбинацией. (Это общее поведение PowerPoint; модель Aspose.Slides следует той же логике.)

Есть ли ограничения при конвертации анимаций в видео для некоторых эффектов?

В целом анимации поддерживаются, однако в редких случаях или для специфических эффектов результат может отличаться. Рекомендуется протестировать используемые эффекты и текущую версию библиотеки.