Aplicar animaciones de forma en presentaciones usando PHP
Las animaciones son efectos visuales que pueden aplicarse a textos, imágenes, formas o gráficos. Dan vida a las presentaciones o a sus componentes.
¿Por qué usar animaciones en presentaciones?
Usando animaciones, puedes
- controlar el flujo de información
- destacar puntos importantes
- incrementar el interés o la participación de la audiencia
- hacer que el contenido sea más fácil de leer, asimilar o procesar
- captar la atención de los lectores o espectadores hacia partes importantes de la presentación
PowerPoint ofrece muchas opciones y herramientas para animaciones y efectos de animación en las categorías de entrada, salida, énfasis y trayectorias de movimiento.
Animaciones en Aspose.Slides
- Aspose.Slides proporciona las clases y tipos que necesita para trabajar con animaciones bajo el espacio de nombres
Aspose.Slides.Animation, - Aspose.Slides ofrece más de 150 efectos de animación bajo la enumeración EffectType. Estos efectos son esencialmente los mismos (o equivalentes) que se utilizan en PowerPoint.
Aplicar animación a un TextBox
Aspose.Slides para PHP a través de Java le permite aplicar animación al texto de una forma.
- Cree una instancia de la clase Presentation.
- Obtenga una referencia a una diapositiva mediante su índice.
- Agregue un AutoShape rectangular.
- Añada texto al TextFrame de
AutoShape. - Obtenga la secuencia principal de efectos.
- Agregue un efecto de animación a AutoShape.
- Utilice el método
TextAnimation.setBuildTypey el valor de la enumeraciónBuildType. - Guarde la presentación en disco como un archivo PPTX.
Este código PHP le muestra cómo aplicar el efecto Fade a AutoShape y establecer la animación de texto al valor By 1st Level Paragraphs:
# Instancia una clase de presentación que representa un archivo de presentación.
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
# Añade un nuevo AutoShape con texto
$autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
$textFrame = $autoShape->getTextFrame();
$textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
# Obtiene la secuencia principal de la diapositiva.
$sequence = $sld->getTimeline()->getMainSequence();
# Añade efecto de animación Fade a la forma
$effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
# Anima el texto de la forma por párrafos de primer nivel
$effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
# Guarda el archivo PPTX en disco
$pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Aplicar animación a un PictureFrame
- Cree una instancia de la clase Presentation.
- Obtenga una referencia a una diapositiva mediante su índice.
- Agregue o obtenga un PictureFrame en la diapositiva.
- Obtenga la secuencia principal de efectos.
- Añada un efecto de animación a PictureFrame.
- Guarde la presentación en disco como un archivo PPTX.
Este código PHP le muestra cómo aplicar el efecto Fly a un marco de imagen:
# Instancia una clase de presentación que representa un archivo de presentación.
$pres = new Presentation();
try {
# Carga la imagen que se añadirá a la colección de imágenes de la presentación
$picture;
$image = Images->fromFile("aspose-logo.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Añade un marco de imagen a la diapositiva
$picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
# Obtiene la secuencia principal de la diapositiva.
$sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
# Añade la animación Fly desde la izquierda al marco de imagen
$effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
# Guarda el archivo PPTX en disco
$pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Aplicar animación a una forma
- Cree una instancia de la clase Presentation.
- Obtenga una referencia a una diapositiva mediante su índice.
- Agregue un AutoShape rectangular.
- Agregue una AutoShape con bisel (cuando se hace clic en este objeto, se reproduce la animación).
- Cree una secuencia de efectos en la forma con bisel.
- Cree un
UserPathpersonalizado. - Añada comandos para mover al
UserPath. - Guarde la presentación en disco como un archivo PPTX.
Este código PHP le muestra cómo aplicar el efecto PathFootball (ruta de fútbol) a una forma:
# Instancia una clase Presentation que representa un archivo PPTX.
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
# Crea el efecto PathFootball para una forma existente desde cero.
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
$ashp->addTextFrame("Animated TextBox");
# Añade el efecto de animación PathFootball
$pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
# Crea una especie de "botón".
$shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
# Crea una secuencia de efectos para este botón.
$seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
# Crea una ruta de usuario personalizada. Nuestro objeto se moverá solo después de que se haga clic en el botón.
$fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
# Añade comandos para mover ya que la ruta creada está vacía.
$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);
# Escribe el archivo PPTX en disco
$pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Obtener los efectos de animación aplicados a una forma
Los siguientes ejemplos le muestran cómo usar el método getEffectsByShape de la clase Sequence para obtener todos los efectos de animación aplicados a una forma.
Ejemplo 1: Obtener efectos de animación aplicados a una forma en una diapositiva normal
Anteriormente, aprendió cómo añadir efectos de animación a formas en presentaciones de PowerPoint. El siguiente fragmento de código muestra cómo obtener los efectos aplicados a la primera forma en la primera diapositiva normal de la presentación AnimExample_out.pptx.
$Array = new java_class("java.lang.reflect.Array");
$presentation = new Presentation("AnimExample_out.pptx");
try {
$firstSlide = $presentation->getSlides()->get_Item(0);
# Obtiene la secuencia principal de animación de la diapositiva.
$sequence = $firstSlide->getTimeline()->getMainSequence();
# Obtiene la primera forma de la primera diapositiva.
$shape = $firstSlide->getShapes()->get_Item(0);
# Obtiene los efectos de animación aplicados a la forma.
$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();
}
}
Ejemplo 2: Obtener todos los efectos de animación, incluidos los heredados de los marcadores de posición
Si una forma en una diapositiva normal tiene marcadores de posición que están en la diapositiva de diseño y/o en la diapositiva maestra, y se han añadido efectos de animación a esos marcadores, entonces todos los efectos de la forma se reproducirán durante la presentación, incluidos los heredados de los marcadores.
Supongamos que tenemos un archivo de presentación PowerPoint sample.pptx con una diapositiva que contiene solo una forma de pie de página con el texto “Made with Aspose.Slides” y se ha aplicado el efecto Random Bars a la forma.

Supongamos también que el efecto Split se ha aplicado al marcador de posición del pie de página en la diapositiva de diseño.

Y, por último, el efecto Fly In se ha aplicado al marcador de posición del pie de página en la diapositiva maestra.

El siguiente fragmento de código muestra cómo usar el método getBasePlaceholder de la clase Shape para acceder a los marcadores de posición de la forma y obtener los efectos de animación aplicados a la forma del pie de página, incluidos los heredados de los marcadores ubicados en las diapositivas de diseño y maestra.
$presentation = new Presentation("sample.pptx");
$slide = $presentation->getSlides()->get_Item(0);
// Obtiene los efectos de animación de la forma en la diapositiva normal.
$shape = $slide->getShapes()->get_Item(0);
$shapeEffects = $slide->getTimeline()->getMainSequence()->getEffectsByShape($shape);
// Obtiene los efectos de animación del marcador de posición en la diapositiva de diseño.
$layoutShape = $shape->getBasePlaceholder();
$layoutShapeEffects = $slide->getLayoutSlide()->getTimeline()->getMainSequence()->getEffectsByShape($layoutShape);
// Obtiene los efectos de animación del marcador de posición en la diapositiva maestra.
$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;
}
}
Salida:
Main sequence of shape effects:
Type: 47, subtype: 2 // Fly, Abajo
Type: 134, subtype: 45 // Split, VerticalIn
Type: 126, subtype: 22 // RandomBars, Horizontal
Cambiar los métodos de sincronización de efectos de animación
Aspose.Slides para PHP a través de Java le permite cambiar las propiedades de sincronización de un efecto de animación.

Estas son las correspondencias entre la sincronización de PowerPoint y las propiedades de Effect Timing:
- La lista desplegable Inicio de sincronización de PowerPoint coincide con el método Timing::getTriggerType.
- La lista desplegable Duración de sincronización de PowerPoint coincide con el método Timing::getDuration. La duración de una animación (en segundos) es el tiempo total que tarda la animación en completar un ciclo.
- La lista desplegable Retraso de sincronización de PowerPoint coincide con el método Timing::getTriggerDelayTime.
Así es como se cambian las propiedades de sincronización del efecto:
- Aplicar o obtener el efecto de animación.
- Establezca los nuevos valores que necesite usando el método Effect::getTiming.
- Guarde el archivo PPTX modificado.
Este código PHP demuestra la operación:
# Instancia una clase de presentación que representa un archivo de presentación.
$pres = new Presentation("AnimExample_out.pptx");
try {
# Obtiene la secuencia principal de la diapositiva.
$sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
# Obtiene el primer efecto de la secuencia principal.
$effect = $sequence->get_Item(0);
# Cambia el TriggerType del efecto para iniciar con clic
$effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
# Cambia la duración del efecto
$effect->getTiming()->setDuration(3.0);
# Cambia el TriggerDelayTime del efecto
$effect->getTiming()->setTriggerDelayTime(0.5);
# Guarda el archivo PPTX en disco
$pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Sonido del efecto de animación
Aspose.Slides proporciona estos métodos para trabajar con sonidos en efectos de animación:
Agregar sonido a un efecto de animación
Este código PHP le muestra cómo agregar un sonido a un efecto de animación y detenerlo cuando comienza el siguiente efecto:
$pres = new Presentation("AnimExample_out.pptx");
try {
# Añade audio a la colección de audio de la presentación
$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);
# Obtiene la secuencia principal de la diapositiva.
$sequence = $firstSlide->getTimeline()->getMainSequence();
# Obtiene el primer efecto de la secuencia principal
$firstEffect = $sequence->get_Item(0);
# Comprueba el efecto para "Sin sonido"
if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
# Añade sonido al primer efecto
$firstEffect->setSound($effectSound);
}
# Obtiene la primera secuencia interactiva de la diapositiva.
$interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
# Establece la bandera "Detener sonido anterior" del efecto
$interactiveSequence->get_Item(0)->setStopPreviousSound(true);
# Guarda el archivo PPTX en disco
$pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Extraer el sonido de un efecto de animación
- Cree una instancia de la clase Presentation.
- Obtenga una referencia a una diapositiva mediante su índice.
- Obtenga la secuencia principal de efectos.
- Extraiga el sonido incrustado en cada efecto de animación mediante setSound(IAudio value).
Este código PHP le muestra cómo extraer el sonido incrustado en un efecto de animación:
# Instancia una clase de presentación que representa un archivo de presentación.
$presentation = new Presentation("EffectSound.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
# Obtiene la secuencia principal de la diapositiva.
$sequence = $slide->getTimeline()->getMainSequence();
foreach($sequence as $effect) {
if (java_is_null($effect->getSound())) {
continue;
}
# Extrae el sonido del efecto en un array de bytes
$audio = $effect->getSound()->getBinaryData();
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Después de la animación
Aspose.Slides para PHP a través de Java le permite cambiar la propiedad After animation de un efecto de animación.

La lista desplegable After animation del efecto de PowerPoint coincide con estos métodos:
- setAfterAnimationType(int value) método que describe el tipo After animation:
- PowerPoint More Colors coincide con el tipo AfterAnimationType::Color;
- PowerPoint Don’t Dim coincide con el tipo AfterAnimationType::DoNotDim (tipo predeterminado);
- PowerPoint Hide After Animation coincide con el tipo AfterAnimationType::HideAfterAnimation;
- PowerPoint Hide on Next Mouse Click coincide con el tipo AfterAnimationType::HideOnNextMouseClick.
- setAfterAnimationColor(IColorFormat value) método que define el formato de color After animation. Este método funciona junto con el tipo AfterAnimationType::Color. Si cambia el tipo a otro, el color After animation se borrará.
Este código PHP le muestra cómo cambiar un efecto After animation:
# Instancia una clase de presentación que representa un archivo de presentación
$pres = new Presentation("AnimImage_out.pptx");
try {
$firstSlide = $pres->getSlides()->get_Item(0);
# Obtiene el primer efecto de la secuencia principal
$firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
# Cambia el tipo de animación posterior a Color
$firstEffect->setAfterAnimationType(AfterAnimationType::Color);
# Define el color de atenuación de la animación posterior
$firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
# Guarda el archivo PPTX en disco
$pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Animar texto
Aspose.Slides proporciona estos métodos para trabajar con el bloque Animate text de un efecto de animación:
- setAnimateTextType(int value) que describe el tipo de animación de texto del efecto. El texto de la forma puede animarse:
- Todo a la vez (AnimateTextType::AllAtOnce);
- Por palabra (AnimateTextType::ByWord);
- Por letra (AnimateTextType::ByLetter).
- setDelayBetweenTextParts(float value) establece un retraso entre las partes de texto animado (palabras o letras). Un valor positivo especifica el porcentaje de la duración del efecto. Un valor negativo especifica el retraso en segundos.
Así es como puede cambiar las propiedades Animate text del efecto:
- Aplicar o obtener el efecto de animación.
- Use el método setBuildType(int value) y el valor BuildType::AsOneObject para desactivar el modo de animación By Paragraphs.
- Establezca nuevos valores usando los métodos setAnimateTextType(int value) y setDelayBetweenTextParts(float value).
- Guarde el archivo PPTX modificado.
Este código PHP demuestra la operación:
# Instancia una clase de presentación que representa un archivo de presentación.
$pres = new Presentation("AnimTextBox_out.pptx");
try {
$firstSlide = $pres->getSlides()->get_Item(0);
# Obtiene el primer efecto de la secuencia principal
$firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
# Cambia el tipo de animación de texto del efecto a "As One Object"
$firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
# Cambia el tipo de animación de texto del efecto a "By word"
$firstEffect->setAnimateTextType(AnimateTextType::ByWord);
# Establece el retraso entre palabras al 20% de la duración del efecto
$firstEffect->setDelayBetweenTextParts(20.0);
# Guarda el archivo PPTX en disco
$pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Preguntas frecuentes
¿Cómo puedo garantizar que las animaciones se conserven al publicar la presentación en la web?
Exportar a HTML5 y habilite las opciones responsables de las animaciones de forma y de transición. El HTML plano no reproduce animaciones de diapositivas, mientras que HTML5 sí.
¿Cómo afecta al cambiar el orden Z (orden de capas) de las formas a la animación?
El orden Z y el orden de dibujo son independientes: un efecto controla el momento y el tipo de aparición/desaparición, mientras que el orden Z determina qué cubre a qué. El resultado visible está definido por su combinación. (Este es el comportamiento general de PowerPoint; el modelo de efectos y formas de Aspose.Slides sigue la misma lógica.)
¿Existen limitaciones al convertir animaciones a vídeo para ciertos efectos?
En general, las animaciones son compatibles, pero casos raros o efectos específicos pueden renderizarse de forma diferente. Se recomienda probar con los efectos que utilice y con la versión de la biblioteca.