Shape Animation

Animations are visual effects that can be applied to texts, images, shapes, or charts. They give life to presentations or its constituents.

Why Use Animations in Presentations?

Using animations, you can

  • control the flow of information
  • emphasize important points
  • increase interest or participation among your audience
  • make content easier to read or assimilate or process
  • draw your readers or viewers attention to important parts in a presentation

PowerPoint provides many options and tools for animations and animation effects across the entrance, exit, emphasis, and motion paths categories.

Animations in Aspose.Slides

  • Aspose.Slides provides the classes and types you need to work with animations under the Aspose.Slides.Animation namespace,
  • Aspose.Slides provides over 150 animation effects under the EffectType enumeration. These effects are essentially the same (or equivalent) effects used in PowerPoint.

Apply Animation to TextBox

Aspose.Slides for PHP via Java allows you to apply animation to the text in a shape.

  1. Create an instance of the Presentation class.
  2. Obtain a slide reference through its index.
  3. Add a rectangle IAutoShape.
  4. Add text to IAutoShape.TextFrame.
  5. Get a main sequence of effects.
  6. Add an animation effect to IAutoShape.
  7. Set the TextAnimation.BuildType property to the value from BuildType Enumeration.
  8. Write the presentation to disk as a PPTX file.

This PHP code shows you how to apply the Fade effect to AutoShape and set the text animation to By 1st Level Paragraphs value:

  # Instantiates a presentation class that represents a presentation file.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Adds new AutoShape with text
    $autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
    $textFrame = $autoShape->getTextFrame();
    $textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
    # Gets the main sequence of the slide.
    $sequence = $sld->getTimeline()->getMainSequence();
    # Adds Fade animation effect to shape
    $effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
    # Animates shape text by 1st level paragraphs
    $effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
    # Save the PPTX file to disk
    $pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Apply Animation to PictureFrame

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Add or get a PictureFrame on the slide.
  4. Get the main sequence of effects.
  5. Add an animation effect to PictureFrame.
  6. Write the presentation to disk as a PPTX file.

This PHP code shows you how to apply the Fly effect to a picture frame:

  # Instantiates a presentation class that represents a presentation file.
  $pres = new Presentation();
  try {
    # Load Image to be added in presentaiton image collection
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Adds picture frame to slide
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
    # Gets the main sequence of the slide.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Adds Fly from Left animation effect to picture frame
    $effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
    # Save the PPTX file to disk
    $pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Apply Animation to Shape

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Add a rectangle IAutoShape.
  4. Add a Bevel IAutoShape (when this object is clicked, the animation gets played).
  5. Create a sequence of effects on the bevel shape.
  6. Create a custom UserPath.
  7. Add commands for moving to the UserPath.
  8. Write the presentation to disk as a PPTX file.

This PHP code shows you how to apply the PathFootball (path football) effect to a shape:

  # Instantiate a Presentation class that represents a PPTX file.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Creates PathFootball effect for existing shape from scratch.
    $ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
    $ashp->addTextFrame("Animated TextBox");
    # Adds the PathFootBall animation effect
    $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
    # Creates some kind of "button".
    $shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
    # Creates a sequence of effects for this button.
    $seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
    # Creates a custom user path. Our object will be moved only after the button is clicked.
    $fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
    # Adds commands for moving since created path is empty.
    $motionBhv = $fxUserPath->getBehaviors()->get_Item(0);
    $pts = new Point2DFloat[1];
    $pts[0] = new Point2DFloat(0.076, 0.59);
    $motionBhv->getPath()->add(MotionCommandPathType::LineTo, $pts, MotionPathPointsType::Auto, true);
    $pts[0] = new Point2DFloat(-0.076, -0.59);
    $motionBhv->getPath()->add(MotionCommandPathType::LineTo, $pts, MotionPathPointsType::Auto, false);
    $motionBhv->getPath()->add(MotionCommandPathType::End, null, MotionPathPointsType::Auto, false);
    # Writes the PPTX file to disk
    $pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Get the Animation Effects Applied to Shape

You may decide to find out the all animation effects applied to a single shape.

This PHP code shows you how to get the all effects applied to a specific shape:

  # Instantiates a presentation class that represents a presentation file.
  $pres = new Presentation("AnimExample_out.pptx");
  $Array = new java_class("java.lang.reflect.Array");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Gets the main sequence of the slide.
    $sequence = $firstSlide->getTimeline()->getMainSequence();
    # Gets the first shape on slide.
    $shape = $firstSlide->getShapes()->get_Item(0);
    # Gets all animation effects applied to the shape.
    $shapeEffects = $sequence->getEffectsByShape($shape);
    if (java_values($Array->getLength($shapeEffects)) > 0) {
      echo("The shape " . $shape->getName() . " has " . $Array->getLength($shapeEffects) . " animation effects.");
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Change Animation Effect Timing Properties

Aspose.Slides for PHP via Java allows you to change the Timing properties of an animation effect.

This is the Animation Timing pane in Microsoft PowerPoint:

example1_image

These are the correspondences between PowerPoint Timing and Effect.Timing properties:

This is how you change the Effect Timing properties:

  1. Apply or get the animation effect.
  2. Set new values for the Effect.Timing properties you need.
  3. Save the modified PPTX file.

This PHP code demonstrates the operation:

  # Instantiates a presentation class that represents a presentation file.
  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Gets the main sequence of the slide.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Gets the first effect of main sequence.
    $effect = $sequence->get_Item(0);
    # Changes effect TriggerType to start on click
    $effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
    # Changes effect Duration
    $effect->getTiming()->setDuration(3.0);
    # Changes effect TriggerDelayTime
    $effect->getTiming()->setTriggerDelayTime(0.5);
    # Saves the PPTX file to disk
    $pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animation Effect Sound

Aspose.Slides provides these properties to allow you to work with sounds in animation effects:

Add Animation Effect Sound

This PHP code shows you how to add an animation effect sound and stop it when the next effect starts:

  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Adds audio to presentation audio collection
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "sampleaudio.wav"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
    $effectSound = $pres->getAudios()->addAudio($bytes);

    $firstSlide = $pres->getSlides()->get_Item(0);
    # Gets the main sequence of the slide.
    $sequence = $firstSlide->getTimeline()->getMainSequence();
    # Gets the first effect of the main sequence
    $firstEffect = $sequence->get_Item(0);
    # Сhecks the effect for "No Sound"
    if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
      # Adds sound for the first effect
      $firstEffect->setSound($effectSound);
    }
    # Gets the first interactive sequence of the slide.
    $interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
    # Sets the effect "Stop previous sound" flag
    $interactiveSequence->get_Item(0)->setStopPreviousSound(true);
    # Writes the PPTX file to disk
    $pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Extract Animation Effect Sound

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Get the main sequence of effects.
  4. Extract the setSound(IAudio value) embedded to each animation effect.

This PHP code shows you how to extract the sound embedded in an animation effect:

  # Instantiates a presentation class that represents a presentation file.
  $presentation = new Presentation("EffectSound.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Gets the main sequence of the slide.
    $sequence = $slide->getTimeline()->getMainSequence();
    foreach($sequence as $effect) {
      if (java_is_null($effect->getSound())) {
        continue;
      }
      # Extracts the effect sound in byte array
      $audio = $effect->getSound()->getBinaryData();
    }
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

After Animation

Aspose.Slides for PHP via Java allows you to change the After animation property of an animation effect.

This is the Animation Effect pane and extended menu in Microsoft PowerPoint:

example1_image

PowerPoint Effect After animation drop-down list matches these properties:

This PHP code shows you how to change an after animation effect:

  # Instantiates a presentation class that represents a presentation file
  $pres = new Presentation("AnimImage_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Gets the first effect of the main sequence
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Changes the after animation type to Color
    $firstEffect->setAfterAnimationType(AfterAnimationType::Color);
    # Sets the after animation dim color
    $firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
    # Writes the PPTX file to disk
    $pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animate Text

Aspose.Slides provides these properties to allow you to work with an animation effect’s Animate text block:

This is how you can change the Effect Animate text properties:

  1. Apply or get the animation effect.
  2. Set the setBuildType(int value) property to BuildType::AsOneObject value to turn off the By Paragraphs animation mode.
  3. Set new values for the setAnimateTextType(int value) and setDelayBetweenTextParts(float value) properties.
  4. Save the modified PPTX file.

This PHP code demonstrates the operation:

  # Instantiates a presentation class that represents a presentation file.
  $pres = new Presentation("AnimTextBox_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Gets the first effect of the main sequence
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Changes the effect Text animation type to "As One Object"
    $firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
    # Changes the effect Animate text type to "By word"
    $firstEffect->setAnimateTextType(AnimateTextType::ByWord);
    # Sets the delay between words to 20% of effect duration
    $firstEffect->setDelayBetweenTextParts(20.0);
    # Writes the PPTX file to disk
    $pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }