Zastosuj animacje kształtów w prezentacjach przy użyciu PHP

Wstęp

Animacje są efektami wizualnymi, które można zastosować do tekstów, obrazów, kształtów lub wykresów. Nadają życie prezentacjom lub ich elementom.

Dlaczego używać animacji w prezentacjach?

  • kontrolować przepływ informacji
  • podkreślać ważne punkty
  • zwiększać zainteresowanie lub uczestnictwo odbiorców
  • ułatwiać czytanie lub przyswajanie treści
  • przyciągać uwagę czytelników lub widzów do ważnych części w prezentacji

PowerPoint oferuje wiele opcji i narzędzi do animacji oraz efektów animacji w kategoriach wejścia, wyjścia, podkreślenia i ścieżek ruchu.

Animacje w Aspose.Slides

  • Aspose.Slides udostępnia klasy i typy potrzebne do pracy z animacjami w przestrzeni nazw Aspose.Slides.Animation,
  • Aspose.Slides oferuje ponad 150 efektów animacji w wyliczeniu EffectType. Efekty te są zasadniczo takie same (lub równoważne) jak te używane w programie PowerPoint.

Zastosuj animację do pola tekstowego

Aspose.Slides for PHP via Java umożliwia zastosowanie animacji do tekstu w kształcie.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Dodaj prostokątną AutoShape.
  4. Dodaj tekst do TextFrame AutoShapea.
  5. Pobierz główną sekwencję efektów.
  6. Dodaj efekt animacji do AutoShape.
  7. Użyj metody TextAnimation.setBuildType oraz wartości z wyliczenia BuildType.
  8. Zapisz prezentację na dysku jako plik PPTX.

Ten kod PHP pokazuje, jak zastosować efekt Fade do AutoShape oraz ustawić animację tekstu na wartość By 1st Level Paragraphs:

  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Dodaje nową AutoShape z tekstem
    $autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
    $textFrame = $autoShape->getTextFrame();
    $textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
    # Pobiera główną sekwencję slajdu.
    $sequence = $sld->getTimeline()->getMainSequence();
    # Dodaje efekt animacji Fade do kształtu
    $effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
    # Animuje tekst kształtu według paragrafów pierwszego poziomu
    $effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
    # Zapisuje plik PPTX na dysku
    $pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Zastosuj animację do PictureFrame

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Dodaj lub pobierz PictureFrame na slajdzie.
  4. Pobierz główną sekwencję efektów.
  5. Dodaj efekt animacji do PictureFrame.
  6. Zapisz prezentację na dysku jako plik PPTX.
  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji.
  $pres = new Presentation();
  try {
    # Ładuje obraz, który ma zostać dodany do kolekcji obrazów prezentacji.
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Dodaje ramkę obrazu do slajdu.
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
    # Pobiera główną sekwencję slajdu.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Dodaje efekt animacji Fly z lewej strony do ramki obrazu.
    $effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
    # Zapisuje plik PPTX na dysku.
    $pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Zastosuj animację do kształtu

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Dodaj prostokątną AutoShape.
  4. Dodaj kształt ukośny AutoShape, który po kliknięciu uruchamia animację.
  5. Stwórz sekwencję efektów na kształcie ukośnym.
  6. Stwórz niestandardowy UserPath.
  7. Dodaj polecenia przemieszczania do UserPath.
  8. Zapisz prezentację na dysku jako plik PPTX.
  # Tworzy instancję klasy Presentation, która reprezentuje plik PPTX.
  $pres = new Presentation();
  try {
    $sld = $pres->getSlides()->get_Item(0);
    # Tworzy efekt PathFootball dla istniejącego kształtu od podstaw.
    $ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
    $ashp->addTextFrame("Animated TextBox");
    # Dodaje efekt animacji PathFootball
    $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
    # Tworzy pewnego rodzaju "przycisk".
    $shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
    # Tworzy sekwencję efektów dla tego przycisku.
    $seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
    # Tworzy niestandardową ścieżkę użytkownika. Nasz obiekt będzie przemieszczany dopiero po kliknięciu przycisku.
    $fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
    # Dodaje polecenia ruchu, ponieważ utworzona ścieżka jest pusta.
    $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);
    # Zapisuje plik PPTX na dysku
    $pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Pobierz efekty animacji zastosowane do kształtu

Poniższe przykłady pokazują, jak użyć metody getEffectsByShape z klasy Sequence aby uzyskać wszystkie efekty animacji zastosowane do kształtu.

Przykład 1: Pobierz efekty animacji zastosowane do kształtu na normalnym slajdzie

Poprzednio nauczyłeś się, jak dodawać efekty animacji do kształtów w prezentacjach PowerPoint. Poniższy przykładowy kod pokazuje, jak uzyskać efekty zastosowane do pierwszego kształtu na pierwszym normalnym slajdzie w prezentacji AnimExample_out.pptx.

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

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

    # Pobiera główną sekwencję animacji slajdu.
    $sequence = $firstSlide->getTimeline()->getMainSequence();

    # Pobiera pierwszy kształt na pierwszym slajdzie.
    $shape = $firstSlide->getShapes()->get_Item(0);

    # Pobiera efekty animacji zastosowane do kształtu.
    $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();
    }
  }

Przykład 2: Pobierz wszystkie efekty animacji, w tym dziedziczone z pól zastępczych

Jeśli kształt na normalnym slajdzie ma pola zastępcze znajdujące się na slajdzie układu i/lub slajdzie głównym, a do tych pól zostały dodane efekty animacji, to wszystkie efekty kształtu będą odtwarzane podczas pokazu slajdów, w tym dziedziczone z pól zastępczych.

Załóżmy, że mamy plik prezentacji PowerPoint sample.pptx z jednym slajdem zawierającym jedynie kształt stopki z tekstem “Made with Aspose.Slides” oraz zastosowanym efektem Random Bars.

Slide shape animation effect

Załóżmy również, że efekt Split został zastosowany do pola zastępczego stopki na slajdzie layout.

Layout shape animation effect

I w końcu, efekt Fly In został zastosowany do pola zastępczego stopki na slajdzie master.

Master shape animation effect

Poniższy przykładowy kod pokazuje, jak użyć metody getBasePlaceholder z klasy Shape aby uzyskać dostęp do pól zastępczych kształtu i pobrać efekty animacji zastosowane do kształtu stopki, w tym dziedziczone z pól znajdujących się na slajdach layout i master.

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

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

// Pobierz efekty animacji kształtu na normalnym slajdzie.
$shape = $slide->getShapes()->get_Item(0);
$shapeEffects = $slide->getTimeline()->getMainSequence()->getEffectsByShape($shape);

// Pobierz efekty animacji pola zastępczego na slajdzie układu.
$layoutShape = $shape->getBasePlaceholder();
$layoutShapeEffects = $slide->getLayoutSlide()->getTimeline()->getMainSequence()->getEffectsByShape($layoutShape);

// Pobierz efekty animacji pola zastępczego na slajdzie głównym.
$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              // Lot, dół
Type: 134, subtype: 45            // Rozdzielenie, pionowo
Type: 126, subtype: 22            // Losowe paski, poziome

Zmień metody synchronizacji efektu animacji

Aspose.Slides for PHP via Java pozwala na zmianę właściwości Timing efektu animacji.

To jest panel Synchronizacji animacji w Microsoft PowerPoint:

example1_image

Oto powiązania pomiędzy Synchronizacją w PowerPoint a właściwościami Effect Timing :

Tak zmieniasz właściwości Synchronizacji efektu:

  1. Zastosuj lub pobierz efekt animacji.
  2. Ustaw nowe potrzebne wartości przy użyciu metody Effect::getTiming.
  3. Zapisz zmodyfikowany plik PPTX.
  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji.
  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Pobiera główną sekwencję slajdu.
    $sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
    # Pobiera pierwszy efekt głównej sekwencji.
    $effect = $sequence->get_Item(0);
    # Zmienia TriggerType efektu na rozpoczęcie po kliknięciu
    $effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
    # Zmienia Duration efektu
    $effect->getTiming()->setDuration(3.0);
    # Zmienia TriggerDelayTime efektu
    $effect->getTiming()->setTriggerDelayTime(0.5);
    # Zapisuje plik PPTX na dysku
    $pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Dźwięk efektu animacji

Aspose.Slides udostępnia następujące metody umożliwiające pracę z dźwiękami w efektach animacji:

Dodaj dźwięk efektu animacji

Ten kod PHP pokazuje, jak dodać dźwięk do efektu animacji i zatrzymać go, gdy rozpocznie się kolejny efekt:

  $pres = new Presentation("AnimExample_out.pptx");
  try {
    # Dodaje dźwięk do kolekcji audio prezentacji
$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);
    # Pobiera główną sekwencję slajdu.
    $sequence = $firstSlide->getTimeline()->getMainSequence();
    # Pobiera pierwszy efekt głównej sekwencji
    $firstEffect = $sequence->get_Item(0);
    # Sprawdza, czy efekt ma "No Sound"
    if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
      # Dodaje dźwięk do pierwszego efektu
      $firstEffect->setSound($effectSound);
    }
    # Pobiera pierwszą interaktywną sekwencję slajdu.
    $interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
    # Ustawia flagę efektu "Stop previous sound"
    $interactiveSequence->get_Item(0)->setStopPreviousSound(true);
    # Zapisuje plik PPTX na dysku
    $pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Wyodrębnij dźwięk efektu animacji

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Pobierz główną sekwencję efektów.
  4. Wyodrębnij metodę setSound(IAudio value) osadzoną w każdym efekcie animacji.

Ten kod PHP pokazuje, jak wyodrębnić dźwięk osadzony w efekcie animacji:

  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji.
  $presentation = new Presentation("EffectSound.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Pobiera główną sekwencję slajdu.
    $sequence = $slide->getTimeline()->getMainSequence();
    foreach($sequence as $effect) {
      if (java_is_null($effect->getSound())) {
        continue;
      }
      # Wyodrębnia dźwięk efektu do tablicy bajtów
      $audio = $effect->getSound()->getBinaryData();
    }
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Po animacji

Aspose.Slides for PHP via Java pozwala zmienić właściwość After animation (Po animacji) efektu animacji.

To jest panel Efektu animacji oraz rozszerzone menu w Microsoft PowerPoint:

example1_image

Lista rozwijana After animation w PowerPoint odpowiada następującym metodom:

  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji
  $pres = new Presentation("AnimImage_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Pobiera pierwszy efekt głównej sekwencji
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Zmienia typ po animacji na Color
    $firstEffect->setAfterAnimationType(AfterAnimationType::Color);
    # Ustawia kolor przyciemnienia po animacji
    $firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
    # Zapisuje plik PPTX na dysku
    $pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Animuj tekst

Aspose.Slides udostępnia następujące metody umożliwiające pracę z blokiem Animate text (Animuj tekst) efektu animacji:

Tak możesz zmienić właściwości Effect Animate text:

  1. Zastosuj lub pobierz efekt animacji.
  2. Użyj metody setBuildType(int value) i wartości BuildType::AsOneObject, aby wyłączyć tryb animacji By Paragraphs.
  3. Ustaw nowe wartości przy użyciu metod setAnimateTextType(int value) i setDelayBetweenTextParts(float value).
  4. Zapisz zmodyfikowany plik PPTX.
  # Tworzy instancję klasy prezentacji, która reprezentuje plik prezentacji.
  $pres = new Presentation("AnimTextBox_out.pptx");
  try {
    $firstSlide = $pres->getSlides()->get_Item(0);
    # Pobiera pierwszy efekt głównej sekwencji
    $firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
    # Zmienia typ animacji tekstu efektu na "As One Object"
    $firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
    # Zmienia typ animacji tekstu na "By word"
    $firstEffect->setAnimateTextType(AnimateTextType::ByWord);
    # Ustawia opóźnienie między słowami na 20% czasu trwania efektu
    $firstEffect->setDelayBetweenTextParts(20.0);
    # Zapisuje plik PPTX na dysku
    $pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Jak mogę zapewnić zachowanie animacji przy publikowaniu prezentacji w sieci?

Export to HTML5 i włącz opcje odpowiedzialne za animacje kształtów i przejść. Zwykły HTML nie odtwarza animacji slajdów, natomiast HTML5 tak.

Jak zmiana kolejności warstw (z-order) kształtów wpływa na animację?

Animacja i kolejność rysowania są niezależne: efekt kontroluje czas i typ pojawiania się/zanikania, podczas gdy z-order określa, co co przykrywa. Widoczny rezultat jest określony ich kombinacją. (To ogólne zachowanie PowerPoint; model efektów i kształtów Aspose.Slides działa zgodnie z tą logiką.)

Czy istnieją ograniczenia przy konwertowaniu animacji na wideo dla niektórych efektów?

Ogólnie, animacje są obsługiwane, ale w rzadkich przypadkach lub przy niektórych efektach mogą być renderowane inaczej. Zaleca się przetestować używane efekty oraz wersję biblioteki.