Shape-animaties toepassen in presentaties met PHP

Inleiding

Animaties zijn visuele effecten die kunnen worden toegepast op tekst, afbeeldingen, vormen of grafieken. Ze geven levensenergie aan presentaties of hun onderdelen.

Waarom animaties gebruiken in presentaties?

Met animaties kun je

  • de informatiestroom beheersen
  • belangrijke punten benadrukken
  • de belangstelling of deelname van je publiek vergroten
  • de inhoud makkelijker leesbaar, verteerbaar of verwerkbaar maken
  • de aandacht van je lezers of kijkers vestigen op belangrijke delen in een presentatie

PowerPoint biedt veel opties en tools voor animaties en animatie‑effecten binnen de categorieën ingang, exit, accent en bewegingspaden.

Animaties in Aspose.Slides

  • Aspose.Slides levert de klassen en types die je nodig hebt om met animaties te werken onder de Aspose.Slides.Animation namespace,
  • Aspose.Slides biedt meer dan 150 animatie‑effecten via de EffectType enumeratie. Deze effecten zijn in feite dezelfde (of equivalente) effecten die in PowerPoint worden gebruikt.

Animatie toepassen op een TextBox

Aspose.Slides for PHP via Java stelt je in staat om animatie toe te passen op de tekst in een vorm.

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een dia‑referentie via de index.
  3. Voeg een rechthoekige AutoShape toe.
  4. Voeg tekst toe aan AutoShape‑s TextFrame.
  5. Haal de hoofd­reeks van effecten op.
  6. Voeg een animatie‑effect toe aan AutoShape.
  7. Gebruik de TextAnimation.setBuildType‑methode en de waarde uit de BuildType‑enumeratie.
  8. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze PHP‑code laat zien hoe je het Fade‑effect op AutoShape toepast en de tekstanimatie instelt op By 1st Level Paragraphs:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Voegt een nieuwe AutoShape toe met tekst
    $autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
    $textFrame = $autoShape->getTextFrame();
    $textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
    # Haalt de hoofdrij van de dia op.
    $sequence = $sld->getTimeline()->getMainSequence();
    # Voegt een Fade animatie effect toe aan vorm
    $effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
    # Animeert vormtekst per eerste niveau alinea's
    $effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
    # Slaat het PPTX bestand op schijf
    $pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animatie toepassen op een PictureFrame

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een dia‑referentie via de index.
  3. Voeg een PictureFrame toe aan de dia of haal er één op.
  4. Haal de hoofd­reeks van effecten op.
  5. Voeg een animatie‑effect toe aan PictureFrame.
  6. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze PHP‑code laat zien hoe je het Fly‑effect op een picture frame toepast:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt.
  $pres = new Presentation();
  try {
    # Laadt afbeelding die moet worden toegevoegd aan de afbeeldingscollectie van de presentatie
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Voegt picture frame toe aan de dia
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
    # Haalt de hoofdrij van de dia op.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Voegt een Fly‑van‑links‑animatie‑effect toe aan picture frame
    $effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
    # Slaat het PPTX‑bestand op schijf
    $pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animatie toepassen op een Shape

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een dia‑referentie via de index.
  3. Voeg een rechthoekige AutoShape toe.
  4. Voeg een schuine AutoShape toe (wanneer dit object wordt aangeklikt, wordt de animatie afgespeeld).
  5. Maak een reeks effecten voor de schuine vorm.
  6. Maak een aangepaste UserPath.
  7. Voeg commando’s toe om naar de UserPath te bewegen.
  8. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze PHP‑code laat zien hoe je het PathFootball‑effect (voetbalpad) op een vorm toepast:

  # Instantieert een Presentation-klasse die een PPTX-bestand vertegenwoordigt.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Maakt PathFootball-effect voor bestaande vorm vanaf nul.
    $ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
    $ashp->addTextFrame("Animated TextBox");
    # Voegt het PathFootBall-animatie-effect toe
    $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
    # Maakt een soort "knop".
    $shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
    # Maakt een reeks effecten voor deze knop.
    $seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
    # Maakt een aangepast gebruikerspad. Ons object wordt alleen verplaatst nadat de knop wordt aangeklikt.
    $fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
    # Voegt opdrachten toe voor verplaatsen omdat het aangemaakte pad leeg is.
    $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);
    # Schrijft het PPTX-bestand naar schijf
    $pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

De animatie‑effecten op een vorm opvragen

De volgende voorbeelden laten zien hoe je de getEffectsByShape‑methode van de Sequence klasse gebruikt om alle animatie‑effecten op te halen die op een vorm zijn toegepast.

Voorbeeld 1: Animatie‑effecten opvragen die op een vorm op een normale dia zijn toegepast

Eerder leerde je hoe je animatie‑effecten aan vormen in PowerPoint‑presentaties kunt toevoegen. De volgende voorbeeldcode laat zien hoe je de effecten opvraagt die op de eerste vorm op de eerste normale dia in de presentatie AnimExample_out.pptx zijn toegepast.

  $Array = new java_class("java.lang.reflect.Array");
  $presentation = new Presentation("AnimExample_out.pptx");

  try {
    $firstSlide = $presentation->getSlides()->get_Item(0);

    # Haalt de hoofd‑animatierij van de dia op.
    $sequence = $firstSlide->getTimeline()->getMainSequence();

    # Haalt de eerste vorm op van de eerste dia.
    $shape = $firstSlide->getShapes()->get_Item(0);

    # Haalt de animatie‑effecten op die op de vorm zijn toegepast.
    $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($presentation)) {
      $presentation->dispose();
    }
  }

Voorbeeld 2: Alle animatie‑effecten opvragen, inclusief die van aanduidingsobjecten

Als een vorm op een normale dia aanduidingsobjecten heeft die zich op de layout‑dia en/of master‑dia bevinden, en er zijn animatie‑effecten aan deze aanduidingsobjecten toegevoegd, dan worden alle effecten van de vorm afgespeeld tijdens de diavoorstelling, inclusief de geërfde effecten van de aanduidingsobjecten.

Stel, we hebben een PowerPoint‑presentatiebestand sample.pptx met één dia die alleen een voettekst‑vorm bevat met de tekst “Made with Aspose.Slides” en het Random Bars‑effect is op die vorm toegepast.

Dia‑vorm animatie‑effect

Stel bovendien dat het Split‑effect op de voettekst‑placeholder op de layout‑dia is toegepast.

Layout‑vorm animatie‑effect

En tenslotte is het Fly In‑effect op de voettekst‑placeholder op de master‑dia toegepast.

Master‑vorm animatie‑effect

De volgende voorbeeldcode laat zien hoe je de getBasePlaceholder‑methode van de Shape klasse gebruikt om de placeholders van de vorm te benaderen en de animatie‑effecten op de voettekst‑vorm op te halen, inclusief de geërfde effecten van placeholders op de layout‑ en master‑dia’s.

$presentation = new Presentation("sample.pptx");

$slide = $presentation->getSlides()->get_Item(0);

// Haal de animatie-effecten op van de vorm op de normale dia.
$shape = $slide->getShapes()->get_Item(0);
$shapeEffects = $slide->getTimeline()->getMainSequence()->getEffectsByShape($shape);

// Haal de animatie-effecten op van de placeholder op de layout-dia.
$layoutShape = $shape->getBasePlaceholder();
$layoutShapeEffects = $slide->getLayoutSlide()->getTimeline()->getMainSequence()->getEffectsByShape($layoutShape);

// Haal de animatie-effecten op van de placeholder op de master-dia.
$masterShape = $layoutShape->getBasePlaceholder();
$masterShapeEffects = $slide->getLayoutSlide()->getMasterSlide()->getTimeline()->getMainSequence()->getEffectsByShape($masterShape);

echo "Main sequence of shape effects:" . PHP_EOL;
printEffects($masterShapeEffects);
printEffects($layoutShapeEffects);
printEffects($shapeEffects);

$presentation->dispose();
function printEffects($effects) {
    foreach ($effects as $effect) {
        echo "Type: " . $effect->getType() . ", subtype: " . $effect->getSubtype() . PHP_EOL;
    }
}

Output:

Main sequence of shape effects:
Type: 47, subtype: 2              // Vliegen, Onderkant
Type: 134, subtype: 45            // Splitsen, VerticaalIn
Type: 126, subtype: 22            // RandomBars, Horizontaal

Methoden om de timing van animatie‑effecten te wijzigen

Aspose.Slides for PHP via Java laat je toe de Timing‑eigenschappen van een animatie‑effect te wijzigen.

Dit is het Animation Timing‑paneel in Microsoft PowerPoint:

example1_image

Dit zijn de overeenkomsten tussen PowerPoint Timing en de eigenschappen van Effect Timing:

  • De PowerPoint Timing Start‑keuzelijst komt overeen met de methode Timing::getTriggerType.
  • De PowerPoint Timing Duration komt overeen met de methode Timing::getDuration. De duur van een animatie (in seconden) is de totale tijd die een animatie nodig heeft om één cyclus te voltooien.
  • De PowerPoint Timing Delay komt overeen met de methode Timing::getTriggerDelayTime.

Zo wijzig je de Effect Timing‑eigenschappen:

  1. Pas het animatie‑effect toe of haal het op.
  2. Stel nieuwe waarden in via de methode Effect::getTiming.
  3. Sla het gewijzigde PPTX‑bestand op.

Deze PHP‑code demonstreert de bewerking:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt.
  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Haalt de hoofdrij van de dia op.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Haalt het eerste effect van de hoofdrij op.
    $effect = $sequence->get_Item(0);
    # Verandert effect TriggerType zodat het start bij klik
    $effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
    # Verandert effect Duur
    $effect->getTiming()->setDuration(3.0);
    # Verandert effect TriggerDelayTime
    $effect->getTiming()->setTriggerDelayTime(0.5);
    # Slaat het PPTX‑bestand op schijf
    $pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animatie‑effect‑geluid

Aspose.Slides biedt de volgende methoden om met geluiden in animatie‑effecten te werken:

Een animatie‑effect‑geluid toevoegen

Deze PHP‑code laat zien hoe je een animatie‑effect‑geluid toevoegt en stopt wanneer het volgende effect begint:

  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Voegt audio toe aan de audio‑collectie van de presentatie
$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);
    # Haalt de hoofdrij van de dia op.
    $sequence = $firstSlide->getTimeline()->getMainSequence();
    # Haalt het eerste effect van de hoofdrij op
    $firstEffect = $sequence->get_Item(0);
    # Controleert het effect op "No Sound"
    if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
      # Voegt geluid toe aan het eerste effect
      $firstEffect->setSound($effectSound);
    }
    # Haalt de eerste interactieve reeks van de dia op.
    $interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
    # Stelt de vlag "Stop previous sound" van het effect in
    $interactiveSequence->get_Item(0)->setStopPreviousSound(true);
    # Slaat het PPTX‑bestand op schijf
    $pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Een animatie‑effect‑geluid extraheren

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een dia‑referentie via de index.
  3. Haal de hoofd­reeks van effecten op.
  4. Extraheer het ingebedde setSound(IAudio value) uit elk animatie‑effect.

Deze PHP‑code laat zien hoe je het geluid dat in een animatie‑effect is ingebed, extraheert:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt.
  $presentation = new Presentation("EffectSound.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Haalt de hoofdrij van de dia op.
    $sequence = $slide->getTimeline()->getMainSequence();
    foreach($sequence as $effect) {
      if (java_is_null($effect->getSound())) {
        continue;
      }
      # Extraheert het effectgeluid in een byte-array
      $audio = $effect->getSound()->getBinaryData();
    }
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Na de animatie

Aspose.Slides for PHP via Java laat je de eigenschap After animation van een animatie‑effect wijzigen.

Dit is het Animation Effect‑paneel en het uitgebreide menu in Microsoft PowerPoint:

example1_image

De PowerPoint After animation‑keuzelijst komt overeen met de volgende methoden:

Deze PHP‑code laat zien hoe je een after‑animation‑effect wijzigt:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt
  $pres = new Presentation("AnimImage_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Haalt het eerste effect van de hoofdrij op
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Verandert het after animation type naar Kleur
    $firstEffect->setAfterAnimationType(AfterAnimationType::Color);
    # Stelt de after animation dimkleur in
    $firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
    # Slaat het PPTX bestand op schijf
    $pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Tekst animeren

Aspose.Slides biedt de volgende methoden om met het Animate text‑blok van een animatie‑effect te werken:

Zo wijzig je de Effect Animate‑text‑eigenschappen:

  1. Pas het animatie‑effect toe of haal het op.
  2. Gebruik de setBuildType(int value) methode en de waarde BuildType::AsOneObject om de By Paragraphs‑animatiemodus uit te schakelen.
  3. Stel nieuwe waarden in via de methoden setAnimateTextType(int value) en setDelayBetweenTextParts(float value).
  4. Sla het gewijzigde PPTX‑bestand op.

Deze PHP‑code demonstreert de bewerking:

  # Instantieert een presentatieklasse die een presentatiebestand vertegenwoordigt.
  $pres = new Presentation("AnimTextBox_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Haalt het eerste effect van de hoofdrij op
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Verandert het effect Tekstanimatie‑type naar "Als één object"
    $firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
    # Verandert het effect Animeren‑tekst type naar "Per woord"
    $firstEffect->setAnimateTextType(AnimateTextType::ByWord);
    # Stelt de vertraging tussen woorden in op 20% van de effectduur
    $firstEffect->setDelayBetweenTextParts(20.0);
    # Slaat het PPTX‑bestand op schijf
    $pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Hoe zorg ik ervoor dat animaties behouden blijven bij het publiceren van de presentatie op het web?

Export to HTML5 en schakel de opties in die verantwoordelijk zijn voor animaties van shape en transition. eenvoudige HTML speelt geen dia‑animaties af, terwijl HTML5 dat wel doet.

Hoe beïnvloedt het wijzigen van de z‑order (laagvolgorde) van vormen de animatie?

Animatie‑ en tekenvolgorde zijn onafhankelijk: een effect bepaalt het tijdstip en het type verschijnen/verdwijnen, terwijl z‑order bepaalt wat wat bedekt. Het zichtbare resultaat wordt bepaald door hun combinatie. (Dit is het algemene PowerPoint‑gedrag; het Aspose.Slides‑effect‑en‑vormmodel volgt dezelfde logica.)

Zijn er beperkingen bij het omzetten van animaties naar video voor bepaalde effecten?

In het algemeen worden animaties ondersteund, maar zeldzame gevallen of specifieke effecten kunnen anders gerenderd worden. Het wordt aanbevolen om de door jou gebruikte effecten en de bibliotheekversie eerst te testen.