Tillämpa formanimationer i presentationer med PHP

Introduktion

Animationer är visuella effekter som kan appliceras på texter, bilder, former eller diagram. De ger liv åt presentationer eller deras beståndsdelar.

Varför använda animationer i presentationer?

  • kontrollera informationsflödet
  • betona viktiga punkter
  • öka intresse eller engagemang hos din publik
  • göra innehållet lättare att läsa, ta in eller bearbeta
  • rikta dina läsares eller tittares uppmärksamhet mot viktiga delar i en presentation

PowerPoint erbjuder många alternativ och verktyg för animationer och animationseffekter i kategorierna entrance, exit, emphasis och motion paths.

Animationer i Aspose.Slides

  • Aspose.Slides tillhandahåller de klasser och typer du behöver för att arbeta med animationer under namnrymden Aspose.Slides.Animation,
  • Aspose.Slides erbjuder över 150 animationseffekter under enumen EffectType. Dessa effekter är i princip samma (eller motsvarande) effekter som används i PowerPoint.

Applicera animation på en textruta

Aspose.Slides för PHP via Java låter dig applicera animation på texten i en form.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en referens till en bild via dess index.
  3. Lägg till en rektangulär AutoShape.
  4. Lägg till text till AutoShape’s TextFrame.
  5. Hämta en huvudsekvens av effekter.
  6. Lägg till en animationseffekt till AutoShape.
  7. Använd metoden TextAnimation.setBuildType och värdet från BuildType-enumerationen.
  8. Skriv presentationen till disk som en PPTX-fil.

Den här PHP-koden visar hur du applicerar Fade-effekten på AutoShape och ställer in textanimationen till värdet By 1st Level Paragraphs:

  # Instansierar en presentationsklass som representerar en presentationsfil.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Lägger till ny AutoShape med text
    $autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
    $textFrame = $autoShape->getTextFrame();
    $textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
    # Hämtar huvudsekvensen för bilden.
    $sequence = $sld->getTimeline()->getMainSequence();
    # Lägger till Fade-animeringseffekt på formen
    $effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
    # Animerar formens text efter första nivåens stycken
    $effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
    # Sparar PPTX-filen till disk
    $pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Applicera animation på en PictureFrame

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bildreferens via dess index.
  3. Lägg till eller hämta en PictureFrame på bilden.
  4. Hämta huvudsekvensen av effekter.
  5. Lägg till en animationseffekt till PictureFrame.
  6. Skriv presentationen till disk som en PPTX-fil.

Den här PHP-koden visar hur du applicerar Fly-effekten på en bildram:

  # Instansierar en presentationsklass som representerar en presentationsfil.
  $pres = new Presentation();
  try {
    # Laddar bild som ska läggas till i presentationens bildsamling
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Lägger till bildram på bilden
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
    # Hämtar huvudsekvensen för bilden.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Lägger till Fly Från Vänster-animeringseffekt på bildramen
    $effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
    # Sparar PPTX-filen till disk
    $pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Applicera animation på en form

  1. Skapa en instans av Presentation klassen.
  2. Hämta en bildreferens via dess index.
  3. Lägg till en rektangulär AutoShape.
  4. Lägg till en snedkantad AutoShape (när detta objekt klickas spelas animationen upp).
  5. Skapa en sekvens av effekter på snedkantformen.
  6. Skapa en anpassad UserPath.
  7. Lägg till kommandon för att flytta till UserPath.
  8. Skriv presentationen till disk som en PPTX-fil.

Den här PHP-koden visar hur du applicerar PathFootball (path football)-effekten på en form:

  # Instansierar en Presentation-klass som representerar en PPTX-fil.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Skapar PathFootball-effekt för befintlig form från början.
    $ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
    $ashp->addTextFrame("Animated TextBox");
    # Lägger till PathFootBall-animeringseffekt
    $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
    # Skapar någon form av "button".
    $shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
    # Skapar en sekvens av effekter för denna knapp.
    $seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
    # Skapar en anpassad användarväg. Vårt objekt kommer endast att flyttas efter att knappen har klickats.
    $fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
    # Lägger till kommandon för förflyttning eftersom den skapade vägen är tom.
    $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);
    # Skriver PPTX-filen till disk
    $pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Hämta animationseffekterna som applicerats på en form

Följande exempel visar hur du använder metoden getEffectsByShape från klassen Sequence för att hämta alla animationseffekter som applicerats på en form.

Exempel 1: Hämta animationseffekter som applicerats på en form på en normal bild

Tidigare lärde du dig hur man lägger till animationseffekter på former i PowerPoint-presentationer. Följande exempel kod visar hur du hämtar effekterna som applicerats på den första formen på den första normala bilden i presentationen AnimExample_out.pptx.

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

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

    # Hämtar huvudanimationsekvensen för bilden.
    $sequence = $firstSlide->getTimeline()->getMainSequence();

    # Hämtar den första formen på den första bilden.
    $shape = $firstSlide->getShapes()->get_Item(0);

    # Hämtar animationseffekter som applicerats på formen.
    $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();
    }
  }

Exempel 2: Hämta alla animationseffekter, inklusive de som ärvs från platshållare

Om en form på en normal bild har platshållare som finns på layoutbilden och/eller mastern, och animationseffekter har lagts till dessa platshållare, så kommer alla effekter för formen att spelas upp under bildspelet, inklusive de som ärvs från platshållarna.

Anta att vi har en PowerPoint-presentationfil sample.pptx med en bild som endast innehåller en sidfotform med texten “Made with Aspose.Slides” och effekten Random Bars är applicerad på formen.

Bildform animationseffekt

Anta också att effekten Split är applicerad på sidfotens platshållare på layout-bilden.

Layoutform animationseffekt

Och slutligen är Fly In-effekten applicerad på sidfotens platshållare på master-bilden.

Masterform animationseffekt

Följande exempel kod visar hur du använder metoden getBasePlaceholder från klassen Shape för att komma åt formens platshållare och hämta animationseffekterna som applicerats på sidfotformen, inklusive de som ärvs från platshållare placerade på layout- och mastern.

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

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

// Hämta animationseffekter för formen på den normala bilden.
$shape = $slide->getShapes()->get_Item(0);
$shapeEffects = $slide->getTimeline()->getMainSequence()->getEffectsByShape($shape);

// Hämta animationseffekter för platshållaren på layoutbilden.
$layoutShape = $shape->getBasePlaceholder();
$layoutShapeEffects = $slide->getLayoutSlide()->getTimeline()->getMainSequence()->getEffectsByShape($layoutShape);

// Hämta animationseffekter för platshållaren på mastern.
$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;
    }
}
Main sequence of shape effects:
Type: 47, subtype: 2              // Flyg, Botten
Type: 134, subtype: 45            // Split, VertikalIn
Type: 126, subtype: 22            // RandomBars, Horisontell

Ändra timingmetoder för animationseffekter

Aspose.Slides för PHP via Java låter dig ändra timing‑egenskaper för en animationseffekt.

Detta är Animation Timing-fönstret i Microsoft PowerPoint:

exempel1_bild

Så här ändrar du egenskaperna för Effect Timing:

  1. Apply eller hämta animationseffekten.
  2. Ställ in nya värden du behöver med hjälp av metoden Effect::getTiming.
  3. Spara den modifierade PPTX-filen.

Den här PHP-koden demonstrerar operationen:

  # Instansierar en presentationsklass som representerar en presentationsfil.
  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Hämtar huvudsekvensen för bilden.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Hämtar den första effekten i huvudsekvensen.
    $effect = $sequence->get_Item(0);
    # Ändrar effektens TriggerType till att starta vid klick
    $effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
    # Ändrar effektens varaktighet
    $effect->getTiming()->setDuration(3.0);
    # Ändrar effektens TriggerDelayTime
    $effect->getTiming()->setTriggerDelayTime(0.5);
    # Sparar PPTX-filen till disk
    $pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Ljud för animationseffekt

Aspose.Slides tillhandahåller dessa metoder för att låta dig arbeta med ljud i animationseffekter:

Lägg till ljud för animationseffekt

Den här PHP-koden visar hur du lägger till ett ljud för animationseffekten och stoppar det när nästa effekt startar:

  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Lägger till ljud i presentationens ljudsamling
$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);
    # Hämtar huvudsekvensen för bilden.
    $sequence = $firstSlide->getTimeline()->getMainSequence();
    # Hämtar den första effekten i huvudsekvensen
    $firstEffect = $sequence->get_Item(0);
    # Kontrollerar om effekten har "No Sound"
    if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
      # Lägger till ljud för den första effekten
      $firstEffect->setSound($effectSound);
    }
    # Hämtar den första interaktiva sekvensen för bilden.
    $interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
    # Sätter flaggan för effekten "Stop previous sound"
    $interactiveSequence->get_Item(0)->setStopPreviousSound(true);
    # Skriver PPTX-filen till disk
    $pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Extrahera ljud för animationseffekt

  1. Skapa en instans av klassen Presentation .
  2. Hämta en bildreferens via dess index.
  3. Hämta huvudsekvensen av effekter.
  4. Extrahera den inbäddade setSound(IAudio value) för varje animationseffekt.

Den här PHP-koden visar hur du extraherar ljudet som är inbäddat i en animationseffekt:

  # Instansierar en presentationsklass som representerar en presentationsfil.
  $presentation = new Presentation("EffectSound.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Hämtar huvudsekvensen för bilden.
    $sequence = $slide->getTimeline()->getMainSequence();
    foreach($sequence as $effect) {
      if (java_is_null($effect->getSound())) {
        continue;
      }
      # Extraherar effektljudet i bytearray
      $audio = $effect->getSound()->getBinaryData();
    }
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Efter animation

Aspose.Slides för PHP via Java låter dig ändra egenskapen After animation för en animationseffekt.

Detta är Animation Effect-fönstret och den utökade menyn i Microsoft PowerPoint:

exempel1_bild

PowerPoint Effect After animation-rullgardinsmenyn motsvarar dessa metoder:

Den här PHP-koden visar hur du ändrar en after animation-effekt:

  # Instansierar en presentationsklass som representerar en presentationsfil
  $pres = new Presentation("AnimImage_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Hämtar den första effekten i huvudsekvensen
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Ändrar efteranimationstypen till Color
    $firstEffect->setAfterAnimationType(AfterAnimationType::Color);
    # Sätter färgen för efteranimationens dimning
    $firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
    # Skriver PPTX-filen till disk
    $pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animera text

Aspose.Slides tillhandahåller dessa metoder för att låta dig arbeta med en animationseffects Animate text-block:

Så här kan du ändra egenskaperna för Effect Animate text:

  1. Apply eller hämta animationseffekten.
  2. Använd metoden setBuildType(int value) och värdet BuildType::AsOneObject för att stänga av By Paragraphs-animationsläget.
  3. Ställ in nya värden med hjälp av metoderna setAnimateTextType(int value) och setDelayBetweenTextParts(float value).
  4. Spara den modifierade PPTX-filen.

Den här PHP-koden demonstrerar operationen:

  # Instansierar en presentationsklass som representerar en presentationsfil.
  $pres = new Presentation("AnimTextBox_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Hämtar den första effekten i huvudsekvensen
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Ändrar effektens textanimations typ till "As One Object"
    $firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
    # Ändrar effektens animera text typ till "By word"
    $firstEffect->setAnimateTextType(AnimateTextType::ByWord);
    # Ställer in fördröjning mellan ord till 20 % av effektens varaktighet
    $firstEffect->setDelayBetweenTextParts(20.0);
    # Skriver PPTX-filen till disk
    $pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Hur kan jag säkerställa att animationer bevaras när presentationen publiceras på webben?

Export to HTML5 och aktivera de options som ansvarar för animationer av shape och transition . Vanlig HTML spelar inte upp bildanimationer, medan HTML5 gör det.

Hur påverkar ändring av z-ordning (lagerordning) för former animationen?

Animation och teckningsordning är oberoende: en effekt styr timing och typ av framträdande/försvinnande, medan z-order bestämmer vad som täcker vad. Det synliga resultatet definieras av deras kombination. (Detta är det allmänna PowerPoint‑beteendet; Aspose.Slides effekter‑och‑former-modellen följer samma logik.)

Finns det begränsningar när animationer konverteras till video för vissa effekter?

I allmänhet är animations are supported, men sällsynta fall eller specifika effekter kan renderas annorlunda. Det rekommenderas att testa med de effekter du använder och med biblioteksversionen.