Применение анимаций фигур в презентациях на .NET
Анимации — это визуальные эффекты, которые можно применять к текстам, изображениям, формам или диаграммам. Они придают жизнь презентациям и их элементам.
Зачем использовать анимацию в презентациях?
Используя анимации, вы можете
- контролировать поток информации
- подчеркивать важные моменты
- повышать интерес или вовлеченность аудитории
- делать контент легче читаемым, усваиваемым или обрабатываемым
- привлекать внимание читателей или зрителей к важным частям в презентации
PowerPoint предоставляет множество вариантов и инструментов для анимаций и анимационных эффектов в категориях вход, выход, акцент и пути движения.
Анимации в Aspose.Slides
- Aspose.Slides предоставляет классы и типы, необходимые для работы с анимациями в пространстве имен Aspose.Slides.Animation,
- Aspose.Slides предоставляет более 150 анимационных эффектов в перечислении EffectType. Эти эффекты по сути идентичны (или эквивалентны) эффектам, используемым в PowerPoint.
Применение анимации к TextBox
Aspose.Slides for .NET позволяет применить анимацию к тексту в форме.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте
rectangleIAutoShape. - Добавьте текст в IAutoShape.TextFrame.
- Получите основную последовательность эффектов.
- Добавьте анимационный эффект к IAutoShape.
- Установите свойство TextAnimation.BuildType в значение из перечисления BuildType.
- Запишите презентацию на диск в файл PPTX.
// Создаёт экземпляр класса презентации, представляющего файл презентации.
using (Presentation pres = new Presentation())
{
ISlide sld = pres.Slides[0];
// Добавляет новый AutoShape с текстом
IAutoShape autoShape = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 150, 100);
ITextFrame textFrame = autoShape.TextFrame;
textFrame.Text = "First paragraph \nSecond paragraph \n Third paragraph";
// Получает основную последовательность слайда.
ISequence sequence = sld.Timeline.MainSequence;
// Добавляет эффект анимации Fade к фигуре
IEffect effect = sequence.AddEffect(autoShape, EffectType.Fade, EffectSubtype.None, EffectTriggerType.OnClick);
// Анимирует текст фигуры по абзацам первого уровня
effect.TextAnimation.BuildType = BuildType.ByLevelParagraphs1;
// Сохраняет файл PPTX на диск
pres.Save(path + "AnimTextBox_out.pptx", SaveFormat.Pptx);
}
Применение анимации к PictureFrame
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте или получите PictureFrame на слайде.
- Получите основную последовательность эффектов.
- Добавьте анимационный эффект к PictureFrame.
- Запишите презентацию на диск в файл PPTX.
// Создаёт экземпляр класса презентации, представляющего файл презентации.
using (Presentation pres = new Presentation())
{
// Загружает изображение, которое будет добавлено в коллекцию изображений презентации
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Добавляет рамку изображения на слайд
IPictureFrame picFrame = pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Получает основную последовательность слайда.
ISequence sequence = pres.Slides[0].Timeline.MainSequence;
// Добавляет эффект анимации Fly слева к рамке изображения
IEffect effect = sequence.AddEffect(picFrame, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.OnClick);
// Сохраняет файл PPTX на диск
pres.Save("AnimImage_out.pptx", SaveFormat.Pptx);
}
Применение анимации к Shape
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте
rectangleIAutoShape. - Добавьте
BevelIAutoShape (при щелчке по этому объекту будет воспроизводиться анимация). - Создайте последовательность эффектов для формы с фаской.
- Создайте пользовательский
UserPath. - Добавьте команды для перемещения по
UserPath. - Запишите презентацию на диск в файл PPTX.
// Создаёт экземпляр класса Presentation, представляющего файл презентации.
using (Presentation pres = new Presentation())
{
ISlide sld = pres.Slides[0];
// Создаёт эффект PathFootball для существующей фигуры с нуля.
IAutoShape ashp = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 150, 150, 250, 25);
ashp.AddTextFrame("Animated TextBox");
// Добавляет анимационный эффект PathFootBall.
pres.Slides[0].Timeline.MainSequence.AddEffect(ashp, EffectType.PathFootball,
EffectSubtype.None, EffectTriggerType.AfterPrevious);
// Создаёт некую "button".
IShape shapeTrigger = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Bevel, 10, 10, 20, 20);
// Создаёт последовательность эффектов для кнопки.
ISequence seqInter = pres.Slides[0].Timeline.InteractiveSequences.Add(shapeTrigger);
// Создаёт пользовательский путь. Наш объект будет перемещён только после щелчка по кнопке.
IEffect fxUserPath = seqInter.AddEffect(ashp, EffectType.PathUser, EffectSubtype.None, EffectTriggerType.OnClick);
// Добавляет команды перемещения, так как созданный путь пустой.
IMotionEffect motionBhv = ((IMotionEffect)fxUserPath.Behaviors[0]);
PointF[] pts = new PointF[1];
pts[0] = new PointF(0.076f, 0.59f);
motionBhv.Path.Add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, true);
pts[0] = new PointF(-0.076f, -0.59f);
motionBhv.Path.Add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, false);
motionBhv.Path.Add(MotionCommandPathType.End, null, MotionPathPointsType.Auto, false);
// Записывает файл PPTX на диск
pres.Save("AnimExample_out.pptx", SaveFormat.Pptx);
}
Получение анимационных эффектов, примененных к форме
Следующие примеры показывают, как использовать метод GetEffectsByShape из интерфейса ISequence для получения всех анимационных эффектов, применённых к форме.
Пример 1: Получить анимационные эффекты, примененные к форме на обычном слайде
Ранее вы узнали, как добавлять анимационные эффекты к формам в презентациях PowerPoint. Ниже приведён пример кода, показывающий, как получить эффекты, применённые к первой форме на первом обычном слайде презентации AnimExample_out.pptx.
using (Presentation presentation = new Presentation("AnimExample_out.pptx"))
{
ISlide firstSlide = presentation.Slides[0];
// Получает основную последовательность анимации слайда.
ISequence sequence = firstSlide.Timeline.MainSequence;
// Получает первую форму на первом слайде.
IShape shape = firstSlide.Shapes[0];
// Получает анимационные эффекты, применённые к форме.
IEffect[] shapeEffects = sequence.GetEffectsByShape(shape);
if (shapeEffects.Length > 0)
Console.WriteLine($"The shape {shape.Name} has {shapeEffects.Length} animation effects.");
}
Пример 2: Получить все анимационные эффекты, включая унаследованные из заполнителей
Если форма на обычном слайде имеет заполнители, находящиеся на макете и/или на образце, и к этим заполнителям добавлены анимационные эффекты, то во время показа будут воспроизводятся все эффекты формы, включая унаследованные из заполнителей.
Предположим, что в файле презентации PowerPoint sample.pptx есть один слайд, содержащий только форму нижнего колонтитула с текстом «Made with Aspose.Slides» и к форме применён эффект Random Bars.

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

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

Ниже приведён пример кода, показывающий, как использовать метод GetBasePlaceholder из интерфейса IShape для доступа к заполнителям формы и получения анимационных эффектов, применённых к форме нижнего колонтитула, включая унаследованные из заполнителей, находящихся на макете и образце.
using (Presentation presentation = new Presentation("sample.pptx"))
{
ISlide slide = presentation.Slides[0];
// Получить анимационные эффекты формы на обычном слайде.
IShape shape = slide.Shapes[0];
IEffect[] shapeEffects = slide.Timeline.MainSequence.GetEffectsByShape(shape);
// Получить анимационные эффекты заполнителя на слайде макета.
IShape layoutShape = shape.GetBasePlaceholder();
IEffect[] layoutShapeEffects = slide.LayoutSlide.Timeline.MainSequence.GetEffectsByShape(layoutShape);
// Получить анимационные эффекты заполнителя на слайде шаблона.
IShape masterShape = layoutShape.GetBasePlaceholder();
IEffect[] masterShapeEffects = slide.LayoutSlide.MasterSlide.Timeline.MainSequence.GetEffectsByShape(masterShape);
Console.WriteLine("Main sequence of shape effects:");
PrintEffects(masterShapeEffects);
PrintEffects(layoutShapeEffects);
PrintEffects(shapeEffects);
}
static void PrintEffects(IEnumerable<IEffect> effects)
{
foreach (IEffect effect in effects)
{
Console.WriteLine($"{effect.Type} {effect.Subtype}");
}
}
Output:
Main sequence of shape effects:
Fly Bottom
Split VerticalIn
RandomBars Horizontal
Изменение свойств времени анимационного эффекта
Aspose.Slides for .NET позволяет изменять свойства времени анимационного эффекта.
Это панель настройки времени анимации и расширенное меню в Microsoft PowerPoint:

Это соответствия между настройками времени в PowerPoint и свойствами Effect.Timing:
- Выпадающий список Start в PowerPoint Timing соответствует свойству Effect.Timing.TriggerType.
- Параметр Duration в PowerPoint Timing соответствует свойству Effect.Timing.Duration. Длительность анимации (в секундах) — это общее время, необходимое для завершения одного цикла анимации.
- Параметр Delay в PowerPoint Timing соответствует свойству Effect.Timing.TriggerDelayTime.
- Выпадающий список Repeat в PowerPoint Timing соответствует следующим свойствам:
- свойство Effect.Timing.RepeatCount, описывающее количество повторений эффекта;
- флаг Effect.Timing.RepeatUntilEndSlide, указывающий, повторяется ли эффект до конца слайда;
- флаг Effect.Timing.RepeatUntilNextClick, указывающий, повторяется ли эффект до следующего щелчка.
- Флажок Rewind when done playing в PowerPoint Timing соответствует свойству Effect.Timing.Rewind.
Вот как изменить свойства времени эффекта:
- Применить или получить анимационный эффект.
- Установите новые значения свойств Effect.Timing, которые вам нужны.
- Сохраните изменённый файл PPTX.
// Создаёт экземпляр класса презентации, представляющего файл презентации.
using (Presentation pres = new Presentation("AnimExample_out.pptx"))
{
// Получает основную последовательность слайда.
ISequence sequence = pres.Slides[0].Timeline.MainSequence;
// Получает первый эффект основной последовательности.
IEffect effect = sequence[0];
// Изменяет тип триггера эффекта на запуск по щелчку
effect.Timing.TriggerType = EffectTriggerType.OnClick;
// Изменяет продолжительность эффекта
effect.Timing.Duration = 3f;
// Изменяет время задержки триггера эффекта
effect.Timing.TriggerDelayTime = 0.5f;
// Если значение Repeat эффекта равно "none"
if (effect.Timing.RepeatCount == 1f)
{
// Изменяет повтор эффекта на "Until Next Click"
effect.Timing.RepeatUntilNextClick = true;
}
else
{
// Изменяет повтор эффекта на "Until End of Slide"
effect.Timing.RepeatUntilEndSlide = true;
}
// Включает Rewind для эффекта
effect.Timing.Rewind = true;
// Сохраняет файл PPTX на диск
pres.Save("AnimExample_changed.pptx", SaveFormat.Pptx);
}
Звук анимационного эффекта
Aspose.Slides предоставляет эти свойства для работы со звуками в анимационных эффектах:
Добавить звук анимационного эффекта
Этот код C# демонстрирует, как добавить звук к анимационному эффекту и остановить его, когда начинается следующий эффект:
using (Presentation pres = new Presentation("AnimExample_out.pptx"))
{
// Добавляет аудио в коллекцию аудио презентации
IAudio effectSound = pres.Audios.AddAudio(File.ReadAllBytes("sampleaudio.wav"));
ISlide firstSlide = pres.Slides[0];
// Получает основную последовательность слайда.
ISequence sequence = firstSlide.Timeline.MainSequence;
// Получает первый эффект основной последовательности
IEffect firstEffect = sequence[0];
// Проверяет эффект на отсутствие звука
if (!firstEffect.StopPreviousSound && firstEffect.Sound == null)
{
// Добавляет звук к первому эффекту
firstEffect.Sound = effectSound;
}
// Получает первую интерактивную последовательность слайда.
ISequence interactiveSequence = firstSlide.Timeline.InteractiveSequences[0];
// Устанавливает флаг эффекта "Остановить предыдущий звук"
interactiveSequence[0].StopPreviousSound = true;
// Записывает файл PPTX на диск
pres.Save("AnimExample_Sound_out.pptx", SaveFormat.Pptx);
}
Извлечь звук анимационного эффекта
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по индексу.
- Получите основную последовательность эффектов.
- Извлеките встроенный Sound каждого анимационного эффекта.
// Создаёт экземпляр класса презентации, представляющего файл презентации.
using (Presentation presentation = new Presentation("EffectSound.pptx"))
{
ISlide slide = presentation.Slides[0];
// Получает основную последовательность слайда.
ISequence sequence = slide.Timeline.MainSequence;
foreach (IEffect effect in sequence)
{
if (effect.Sound == null)
continue;
// Извлекает звук эффекта в массив байтов
byte[] audio = effect.Sound.BinaryData;
}
}
После анимации
Aspose.Slides for .NET позволяет изменить свойство After animation анимационного эффекта.
Это панель параметров эффекта после анимации и расширенное меню в Microsoft PowerPoint:

Выпадающий список After animation в PowerPoint соответствует этим свойствам:
- свойство IEffect.AfterAnimationType описывает тип после анимации:
- PowerPoint More Colors соответствует типу AfterAnimationType.Color.
- PowerPoint Don’t Dim соответствует типу AfterAnimationType.DoNotDim (тип по умолчанию).
- PowerPoint Hide After Animation соответствует типу AfterAnimationType.HideAfterAnimation.
- PowerPoint Hide on Next Mouse Click соответствует типу AfterAnimationType.HideOnNextMouseClick.
- свойство IEffect.AfterAnimationColor определяет формат цвета после анимации. Это свойство работает совместно с типом AfterAnimationType.Color. При изменении типа на другой цвет после анимации будет очищен.
// Создаёт экземпляр класса презентации, представляющего файл презентации
using (Presentation pres = new Presentation("AnimImage_out.pptx"))
{
ISlide firstSlide = pres.Slides[0];
// Получает первый эффект основной последовательности
IEffect firstEffect = firstSlide.Timeline.MainSequence[0];
// Меняет тип после анимации на Color
firstEffect.AfterAnimationType = AfterAnimationType.Color;
// Устанавливает цвет затемнения после анимации
firstEffect.AfterAnimationColor.Color = Color.AliceBlue;
// Сохраняет файл PPTX на диск
pres.Save("AnimImage_AfterAnimation.pptx", SaveFormat.Pptx);
}
Анимировать текст
Aspose.Slides предоставляет эти свойства для работы с блоком Animate text анимационного эффекта:
- IEffect.AnimateTextType описывает тип анимации текста эффекта. Текст формы может анимироваться:
- одновременно (AnimateTextType.AllAtOnce тип)
- по словам (AnimateTextType.ByWord тип)
- по буквам (AnimateTextType.ByLetter тип)
- IEffect.DelayBetweenTextParts задаёт задержку между анимируемыми частями текста (словами или буквами). Положительное значение указывает процент от длительности эффекта. Отрицательное значение задаёт задержку в секундах.
Вот как можно изменить свойства анимации текста эффекта:
- Применить или получить анимационный эффект.
- Установите свойство IEffect.TextAnimation.BuildType в значение BuildType.AsOneObject, чтобы отключить режим анимации By Paragraphs.
- Установите новые значения свойств IEffect.AnimateTextType и IEffect.DelayBetweenTextParts.
- Сохраните изменённый файл PPTX.
// Создаёт экземпляр класса презентации, представляющего файл презентации.
using (Presentation pres = new Presentation("AnimTextBox_out.pptx"))
{
ISlide firstSlide = pres.Slides[0];
// Получает первый эффект основной последовательности
IEffect firstEffect = firstSlide.Timeline.MainSequence[0];
// Изменяет тип текстовой анимации эффекта на "As One Object"
firstEffect.TextAnimation.BuildType = BuildType.AsOneObject;
// Изменяет тип анимации текста эффекта на "By word"
firstEffect.AnimateTextType = AnimateTextType.ByWord;
// Устанавливает задержку между словами в 20% от длительности эффекта
firstEffect.DelayBetweenTextParts = 20f;
// Сохраняет файл PPTX на диск
pres.Save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
}
FAQ
Как гарантировать сохранение анимаций при публикации презентации в веб?
Экспортируйте в HTML5 [/slides/net/export-to-html5/] и включите параметры, отвечающие за анимацию shape и transition. Обычный HTML не воспроизводит анимацию слайдов, тогда как HTML5 — воспроизводит.
Как изменение порядка слоёв (z-order) фигур влияет на анимацию?
Анимация и порядок рисования независимы: эффект управляет временем и типом появления/исчезновения, тогда как z-order определяет, что покрывает что. Видимый результат задаётся их комбинацией. (Это общее поведение PowerPoint; модель эффектов и фигур Aspose.Slides следует той же логике.)
Есть ли ограничения при конвертации анимаций в видео для определённых эффектов?
В целом анимации поддерживаются [/slides/net/convert-powerpoint-to-video/], но в редких случаях или для специфических эффектов они могут отображаться иначе. Рекомендуется протестировать используемые эффекты и версию библиотеки.