Správa přechodů snímků v prezentacích pomocí Pythonu přes Java
Přehled
Přechody snímků řídí, jak se snímky zobrazují během prezentace. S Aspose.Slides pro Python přes Java můžete pro každý snímek vybrat efekt přechodu, nastavit postupování kliknutím myši nebo časovačem a upravit možnosti specifické pro daný efekt. Tento článek používá příklady v Pythonu k aplikaci přechodů, nastavení přesné délky trvání přechodu, správě časování snímků a vytvoření přechodu Morph mezi dvěma snímky. Příklady také ukazují, jak uložit nastavení do souboru PPTX.
Přidání přechodu snímku
Pro aplikaci přechodu načtěte prezentaci pomocí třídy Presentation a přistupte k nastavení přechodu snímku prostřednictvím getSlideShowTransition. Použijte setType s hodnotou z výčtu TransitionType, poté prezentaci uložte.
Následující příklad použije přechod Circle na první snímek a přechod Comb na druhý. Použijte soubor input.pptx s alespoň dvěma snímky.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType
presentation = Presentation("input.pptx")
try:
if presentation.getSlides().size() >= 2:
presentation.getSlides().get_Item(0).getSlideShowTransition().setType(TransitionType.Circle)
presentation.getSlides().get_Item(1).getSlideShowTransition().setType(TransitionType.Comb)
presentation.save("slide-transitions.pptx", SaveFormat.Pptx)
else:
print("The input presentation must contain at least two slides.")
finally:
presentation.dispose()
Přidání pokročilého přechodu snímku
Můžete nastavit, jak dlouho snímek zůstane na obrazovce a zda kliknutí myší posune prezentaci dál. Následující metody řídí toto chování:
- setAdvanceOnClick umožňuje divákovi postoupit kliknutím myši.
- setAdvanceAfter povoluje automatické postupování.
- setAdvanceAfterTime určuje zpoždění před automatickým postupováním v milisekundách.
Povolte jak kliknutí, tak časované postupování, aby divák mohl pokračovat kliknutím nebo čekat na časovač. Pro použití pouze časovače předávejte False metodě setAdvanceOnClick. Zpoždění řídí, kdy se prezentace posune dál; nenastavuje délku vizuálního efektu přechodu.
Tento příklad přiřadí různé efekty prvním třem snímkům a povolí automatické postupování po 3, 5 a 7 sekundách. Kliknutí myší mohou také tyto snímky posunout. Použijte soubor input.pptx s alespoň třemi snímky.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType
presentation = Presentation("input.pptx")
try:
if presentation.getSlides().size() >= 3:
first_transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
first_transition.setType(TransitionType.Circle)
first_transition.setAdvanceOnClick(True)
first_transition.setAdvanceAfter(True)
first_transition.setAdvanceAfterTime(3000)
second_transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
second_transition.setType(TransitionType.Comb)
second_transition.setAdvanceOnClick(True)
second_transition.setAdvanceAfter(True)
second_transition.setAdvanceAfterTime(5000)
third_transition = presentation.getSlides().get_Item(2).getSlideShowTransition()
third_transition.setType(TransitionType.Zoom)
third_transition.setAdvanceOnClick(True)
third_transition.setAdvanceAfter(True)
third_transition.setAdvanceAfterTime(7000)
presentation.save("advanced-transitions.pptx", SaveFormat.Pptx)
else:
print("The input presentation must contain at least three slides.")
finally:
presentation.dispose()
Pro kontrolu, zda je časované postupování povoleno, zavolejte getAdvanceAfter. Uložené zpoždění samo o sobě neznamená, že je časovač aktivní.
Další příklad otevře výše uložený soubor, nahlásí každý povolený časovač a zakáže automatické postupování pro snímky se zpožděním delším než dvě sekundy. Pro tyto snímky povolí kliknutí myší a uloží aktualizovaná nastavení.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("advanced-transitions.pptx")
try:
for slide in presentation.getSlides():
transition = slide.getSlideShowTransition()
if transition.getAdvanceAfter():
print(f"Slide {slide.getSlideNumber()}: advance after {transition.getAdvanceAfterTime()} ms.")
if transition.getAdvanceAfterTime() > 2000:
transition.setAdvanceAfter(False)
transition.setAdvanceOnClick(True)
presentation.save("adjusted-transitions.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Přesné řízení časování přechodu
Použijte setDuration ke specifikaci přesné délky trvání efektu přechodu v milisekundách. Metoda getSlideShowTransition snímku vystavuje tato nastavení prostřednictvím třídy SlideShowTransition:
| Metoda | Účel |
|---|---|
| setDuration | Nastavuje délku trvání samotného efektu přechodu v milisekundách. |
| setAdvanceAfterTime | Nastavuje zpoždění před automatickým posunutím snímku v milisekundách. Pro aktivaci tohoto časovače předávejte True metodě setAdvanceAfter. |
| setSpeed | Vybere předdefinovanou rychlostní kategorii z výčtu TransitionSpeed: Slow, Medium nebo Fast. Používá se, když není zadána explicitní délka trvání. |
setDuration řídí pouze efekt přechodu; neurčuje, jak dlouho snímek zůstane viditelný. Automatické zpoždění postupování se nastavuje samostatně. Když není explicitně nastavená délka, Aspose.Slides určí délku efektu z typu přechodu a hodnoty getSpeed.
Použití stejné délky na každý snímek
Pro konzistentní tempo aplikujte stejný efekt a přesnou délku na všechny snímky. Tento příklad načte input.pptx, vybere Fade z výčtu TransitionType a přiřadí každému přechodu délku 750 milisekund. Samostatně povolí automatické postupování po 5 000 milisekundách a zakáže postupování kliknutím, poté výsledek uloží jako PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType
presentation = Presentation("input.pptx")
try:
for slide in presentation.getSlides():
transition = slide.getSlideShowTransition()
transition.setType(TransitionType.Fade)
transition.setDuration(750)
# Nastavte automatické postupování nezávisle na délce trvání efektu.
transition.setAdvanceAfter(True)
transition.setAdvanceAfterTime(5000)
transition.setAdvanceOnClick(False)
presentation.save("precise-transitions.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Nastavení různých délek pro jednotlivé snímky
Různé snímky mohou mít různé délky efektu. Například můžete použít krátký přechod pro úvodní snímek a delší přechod pro úvod sekce. Tento příklad nastaví 500 milisekund pro první snímek a 1 200 milisekund pro druhý. Použijte soubor input.pptx s alespoň dvěma snímky.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType
presentation = Presentation("input.pptx")
try:
if presentation.getSlides().size() >= 2:
first_transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
first_transition.setType(TransitionType.Fade)
first_transition.setDuration(500)
second_transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
second_transition.setType(TransitionType.Push)
second_transition.setDuration(1200)
presentation.save("individual-transition-durations.pptx", SaveFormat.Pptx)
else:
print("The input presentation must contain at least two slides.")
finally:
presentation.dispose()
Koordinace přechodů s animovaným výstupem
Při přípravě animated GIF, HTML5 presentation nebo video nastavte přesné délky přechodů před exportem, aby odpovídaly požadovanému tempu. Například použijte 600 ms fade mezi scénami a samostatně upravte zpoždění postupování každého snímku, aby bylo dostatek času na jeho komentář nebo obsah.
Pro GIF a video koordinujte snímkovou rychlost výstupu s délkou efektu: 600 ms odpovídá 18 snímkům při 30 fps. V HTML5 povolte animované přechody v nastavení exportu. Zkontrolujte podporované efekty a časové možnosti zvoleného formátu a proveďte náhled výstupu, abyste potvrdili synchronizaci.
Načtení existující délky přechodu
Před úpravou přechodu zavolejte getDuration, abyste zjistili, zda je uložena explicitní hodnota. Hodnota -1 znamená, že není nastavená žádná explicitní délka; ne záporná hodnota udává uloženou délku v milisekundách. Nenastavená hodnota není vypočtená doba přehrávání: Aspose.Slides používá typ přechodu a hodnotu getSpeed k určení této délky. Nastavení typu přechodu může inicializovat délku, takže nejprve zkontrolujte původní nastavení.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("input.pptx")
try:
for slide in presentation.getSlides():
transition = slide.getSlideShowTransition()
duration = transition.getDuration()
if duration >= 0:
print(f"Slide {slide.getSlideNumber()}: stored transition duration is {duration} ms.")
else:
print(f"Slide {slide.getSlideNumber()}: no explicit duration; timing depends on transition type {transition.getType()} and speed {transition.getSpeed()}.")
finally:
presentation.dispose()
Přechod Morph
Přechod Morph animuje změny mezi objekty na po sobě jdoucích snímcích. Pro vytvoření jednoduchého efektu Morph zkopírujte snímek, přesuňte nebo změňte velikost objektu na kopii a použijte přechod Morph na druhý snímek. Tím se při přechodu animují odpovídající objekty mezi jejich původním a upraveným stavem.
Následující příklad vytvoří snímek s textovým obdélníkem, zkopíruje snímek a změní pozici a velikost obdélníku na kopii. Poté vybere Morph z výčtu TransitionType pro druhý snímek. Otevřete uložený soubor v prohlížeči prezentací, který podporuje Morph, a podívejte se na efekt během prezentace.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType, ShapeType
presentation = Presentation()
try:
first_slide = presentation.getSlides().get_Item(0)
rectangle = first_slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 100)
rectangle.getTextFrame().setText("Morph transition")
second_slide = presentation.getSlides().addClone(first_slide)
moved_rectangle = second_slide.getShapes().get_Item(0)
moved_rectangle.setX(moved_rectangle.getX() + 100)
moved_rectangle.setY(moved_rectangle.getY() + 50)
moved_rectangle.setWidth(moved_rectangle.getWidth() - 200)
moved_rectangle.setHeight(moved_rectangle.getHeight() - 10)
second_slide.getSlideShowTransition().setType(TransitionType.Morph)
presentation.save("morph-transition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Typy přechodu Morph
Výčet TransitionMorphType určuje, jak Morph páruje a animuje obsah:
- ByObject zachází s každým tvarem jako s celým objektem.
- ByWord animuje text párováním slov, kde je to možné.
- ByChar animuje text párováním znaků, kde je to možné.
Použijte setType pro výběr Morph před přístupem k getValue. Hodnota je potom instance třídy MorphTransition, jejíž metoda setMorphType vybere režim párování.
Tento příklad otevře prezentaci vytvořenou v předchozí sekci a nastaví druhý snímek tak, aby používal animaci Morph založenou na slovech.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType, TransitionMorphType, MorphTransition
presentation = Presentation("morph-transition.pptx")
try:
if presentation.getSlides().size() >= 2:
transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
transition.setType(TransitionType.Morph)
transition_value = transition.getValue()
if isinstance(transition_value, MorphTransition):
morph_transition = transition_value
morph_transition.setMorphType(TransitionMorphType.ByWord)
presentation.save("morph-by-word.pptx", SaveFormat.Pptx)
else:
print("Morph transition options are unavailable.")
else:
print("The input presentation must contain at least two slides.")
finally:
presentation.dispose()
Nastavení efektů přechodu
Některé přechody nabízejí další možnosti, například směr nebo zda efekt začíná z černé obrazovky. Dostupné možnosti závisí na přechodu vybraném pomocí setType. Nejprve nastavte typ, poté použijte vhodnou třídu z getValue.
Následující příklad použije přechod Cut na první snímek souboru input.pptx. Volá setFromBlack přes OptionalBlackTransition, aby přechod začínal z černé obrazovky.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TransitionType, OptionalBlackTransition
presentation = Presentation("input.pptx")
try:
transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
transition.setType(TransitionType.Cut)
transition_value = transition.getValue()
if isinstance(transition_value, OptionalBlackTransition):
cut_transition = transition_value
cut_transition.setFromBlack(True)
presentation.save("cut-from-black.pptx", SaveFormat.Pptx)
else:
print("Cut transition options are unavailable.")
finally:
presentation.dispose()
FAQ
Can I control the playback speed of a slide transition?
Mohu ovládat rychlost přehrávání přechodu snímku?
Ano. Upřednostněte setDuration, když potřebujete přesnou délku efektu v milisekundách. Použijte setSpeed, když stačí předdefinovaná kategorie TransitionSpeed – Slow, Medium nebo Fast – a není nastavena explicitní délka. Tato nastavení řídí efekt přechodu nezávisle na zpoždění automatického postupování.
Can I attach audio to a transition and make it loop?
Mohu k přechodu připojit zvuk a nechat jej smyčkovat?
Ano. Přiřaďte vložený zvuk pomocí setSound, předávejte StartSound z výčtu TransitionSoundMode metodě setSoundMode a povolte setSoundLoop s hodnotou True. Zvuk bude smyčkovat až do dalšího zvukového události v prezentaci.
What’s the fastest way to apply the same transition to every slide?
Jaký je nejrychlejší způsob, jak aplikovat stejný přechod na každý snímek?
Procházejte kolekci getSlides prezentace a pro každý snímek zavolejte setType se stejnou hodnotou. V tomtéž cyklu nastavte případné časování a možnosti efektu, aby chování bylo konzistentní napříč snímky.
How can I check which transition is currently set on a slide?
Jak mohu zjistit, který přechod je aktuálně nastaven na snímku?
Zavolejte getType na výsledek getSlideShowTransition snímku. Vrátí hodnotu z výčtu TransitionType; None_ znamená, že není aplikován žádný přechod.