Z zarządzanie BLOB-ami prezentacji w Pythonie przy użyciu Java w celu efektywnego wykorzystania pamięci
Przegląd
Aspose.Slides zapewnia obsługę opartą na BLOB dla dużych danych binarnych w prezentacjach, aby pomóc zmniejszyć zużycie pamięci przy pracy z dużymi obrazami, dźwiękiem, wideo i plikami prezentacji.
Ten artykuł pokazuje, jak używać przetwarzania opartego na BLOB, aby dodać duże multimedia do prezentacji, wyeksportować duże multimedia z prezentacji oraz ładować duże prezentacje bardziej efektywnie. Wyjaśnia także, jak w trakcie przetwarzania można wykorzystywać pliki tymczasowe oraz jak zmienić folder używany do ich przechowywania.
O BLOB
BLOB (Binary Large Object) to zazwyczaj duży element (zdjęcie, prezentacja, dokument lub multimedia) zapisywany w formatach binarnych.
Aspose.Slides for Python via Java pozwala używać BLOB‑ów dla obiektów w sposób zmniejszający zużycie pamięci, gdy pracujemy z dużymi plikami.
Uwaga
Aby obejść pewne ograniczenia przy interakcji ze strumieniami, Aspose.Slides może skopiować zawartość strumienia. Ładowanie dużej prezentacji poprzez jej strumień spowoduje kopiowanie zawartości prezentacji i prowadzi do wolnego ładowania. Dlatego, gdy zamierzasz ładować dużą prezentację, zdecydowanie zalecamy użycie ścieżki do pliku prezentacji, a nie jej strumienia.Używanie BLOBów w celu zmniejszenia zużycia pamięci
Dodanie dużego pliku do prezentacji przy użyciu BLOBów
Aspose.Slides for Python via Java pozwala dodać duże pliki (w tym przypadku duży plik wideo) w procesie z wykorzystaniem BLOB‑ów, aby zmniejszyć zużycie pamięci.
Ten kod w Pythonie pokazuje, jak dodać duży plik wideo poprzez proces BLOB do prezentacji:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadingStreamBehavior, Presentation, SaveFormat
from java.io import FileInputStream
path_to_very_large_video = "veryLargeVideo.avi"
# Utwórz nową prezentację, do której zostanie dodane wideo.
presentation = Presentation()
try:
file_stream = FileInputStream(path_to_very_large_video)
try:
# Zachowaj strumień zablokowany, ponieważ nie zamierzamy uzyskiwać dostępu do pliku wideo.
video = presentation.getVideos().addVideo(file_stream, LoadingStreamBehavior.KeepLocked)
presentation.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video)
# Zapisz prezentację, utrzymując niskie zużycie pamięci.
presentation.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx)
finally:
file_stream.close()
finally:
presentation.dispose()
Eksport dużego pliku z prezentacji przy użyciu BLOBów
Aspose.Slides for Python via Java umożliwia eksport dużych plików (w tym przypadku pliku audio lub wideo) w procesie z wykorzystaniem BLOB‑ów z prezentacji. Na przykład możesz potrzebować wyodrębnić duży plik multimedialny z prezentacji, ale nie chcesz, aby plik był ładowany do pamięci komputera. Eksportując plik przez proces BLOB, utrzymujesz niskie zużycie pamięci.
Ten kod w Pythonie demonstruje opisaną operację:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior
huge_presentation_file = "LargeVideoFileTest.pptx"
load_options = LoadOptions()
# Zablokuj plik źródłowy zamiast ładować go do pamięci.
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
presentation = Presentation(huge_presentation_file, load_options)
try:
# Przesyłaj dane wideo przez bufor, aby utrzymać niskie zużycie pamięci.
buffer = jpype.JArray(jpype.JByte)(8 * 1024)
for index in range(presentation.getVideos().size()):
video = presentation.getVideos().get_Item(index)
# Użyj strumienia zamiast ładować całe wideo do tablicy bajtów.
video_stream = video.getStream()
try:
with open(f"video{index}.avi", "wb") as output_stream:
bytes_read = video_stream.read(buffer, 0, len(buffer))
while bytes_read > 0:
chunk = bytes(buffer[:bytes_read])
output_stream.write(chunk)
bytes_read = video_stream.read(buffer, 0, len(buffer))
finally:
video_stream.close()
# W razie potrzeby zastosuj te same kroki do plików audio.
finally:
presentation.dispose()
Dodanie obrazu jako BLOB do prezentacji
Za pomocą metod klasy ImageCollection możesz dodać duży obraz jako strumień, aby był traktowany jako BLOB.
Ten kod w Pythonie pokazuje, jak dodać duży obraz poprzez proces BLOB:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadingStreamBehavior, Presentation, SaveFormat, ShapeType
from java.io import FileInputStream
path_to_large_image = "large_image.jpg"
# Utwórz nową prezentację, do której zostanie dodany obraz.
presentation = Presentation()
try:
file_stream = FileInputStream(path_to_large_image)
try:
# Zachowaj strumień zablokowany, ponieważ nie zamierzamy uzyskać dostępu do pliku obrazu.
image = presentation.getImages().addImage(file_stream, LoadingStreamBehavior.KeepLocked)
presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, image)
# Zapisz prezentację, utrzymując niskie zużycie pamięci.
presentation.save("presentationWithLargeImage.pptx", SaveFormat.Pptx)
finally:
file_stream.close()
finally:
presentation.dispose()
Pamięć i duże prezentacje
Typowo, aby załadować dużą prezentację, komputery potrzebują dużo pamięci tymczasowej. Cała zawartość prezentacji jest ładowana do pamięci, a plik (z którego prezentacja została załadowana) przestaje być używany.
Rozważ dużą prezentację PowerPoint (large.pptx), która zawiera plik wideo o wielkości 1,5 GB. Standardowa metoda ładowania prezentacji jest opisana w tym kodzie Python:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("large.pptx")
try:
presentation.save("large.pdf", SaveFormat.Pdf)
finally:
presentation.dispose()
Jednak metoda ta zużywa około 1,6 GB pamięci tymczasowej.
Ładowanie dużej prezentacji jako BLOB
Korzystając z obsługi BLOB, możesz załadować dużą prezentację przy bardzo małym zużyciu pamięci. Ten kod w Pythonie pokazuje, jak używać obsługi BLOB do ładowania dużego pliku prezentacji (large.pptx):
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior, SaveFormat
load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)
presentation = Presentation("large.pptx", load_options)
try:
presentation.save("large.pdf", SaveFormat.Pdf)
finally:
presentation.dispose()
Zmiana folderu dla plików tymczasowych
Gdy używany jest proces BLOB, komputer tworzy pliki tymczasowe w domyślnym folderze plików tymczasowych. Jeśli chcesz, aby pliki tymczasowe były przechowywane w innym folderze, możesz zmienić ustawienia przechowywania używając BlobManagementOptions.setTempFilesRootPath:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, PresentationLockingBehavior
load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)
load_options.getBlobManagementOptions().setTempFilesRootPath("temp")
Uwaga
Gdy używasz BlobManagementOptions.setTempFilesRootPath, Aspose.Slides nie tworzy automatycznie folderu do przechowywania plików tymczasowych. Musisz utworzyć folder ręcznie.Zwolnienie obiektów prezentacji w celu zwolnienia pamięci
Podczas przetwarzania dużych prezentacji upewnij się, że instancja Presentation jest prawidłowo zwalniana, aby pamięć, którą zajmowała, została zwolniona. Wywołaj Presentation.dispose po zakończeniu używania prezentacji, aby zwolnić niezarządzane zasoby.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("large.pptx")
try:
# ...przetwarzaj prezentację...
presentation.save("large.pdf", SaveFormat.Pdf)
finally:
# Jawnie zwolnij zasoby.
presentation.dispose()
FAQ
Jakie dane w prezentacji Aspose.Slides są traktowane jako BLOB i kontrolowane przez opcje BLOB?
Duże obiekty binarne, takie jak obrazy, audio i wideo, są traktowane jako BLOB‑y. Cały plik prezentacji również podlega obsłudze BLOB przy jego ładowaniu lub zapisywaniu. Obiekty te są zarządzane przez polityki BLOB, które pozwalają kontrolować użycie pamięci i przechowywanie danych w plikach tymczasowych w razie potrzeby.
Gdzie mogę skonfigurować zasady obsługi BLOB podczas ładowania prezentacji?
Użyj LoadOptions wraz z BlobManagementOptions. Tam ustawiasz limit pamięci dla BLOB‑ów, zezwalasz lub blokujesz pliki tymczasowe, wybierasz ścieżkę główną dla plików tymczasowych oraz określasz zachowanie blokowania źródła.
Czy ustawienia BLOB wpływają na wydajność i jak zbalansować szybkość versus pamięć?
Tak. Przechowywanie BLOB‑ów w pamięci maksymalizuje szybkość, ale zwiększa zużycie RAM; obniżenie limitu pamięci przenosi więcej pracy na pliki tymczasowe, redukując RAM kosztem dodatkowego I/O. Użyj metody setMaxBlobsBytesInMemory, aby uzyskać odpowiedni balans dla swojego obciążenia i środowiska.
Czy opcje BLOB pomagają przy otwieraniu niezwykle dużych prezentacji (np. gigabajtowych)?
Tak. BlobManagementOptions jest zaprojektowane właśnie do takich scenariuszy: włączenie plików tymczasowych i użycie blokowania źródła może znacząco zmniejszyć szczytowe zużycie RAM i ustabilizować przetwarzanie bardzo dużych prezentacji.
Czy mogę używać polityk BLOB przy ładowaniu ze strumieni zamiast z plików dyskowych?
Tak. Te same zasady obowiązują dla strumieni: instancja prezentacji może posiadać i blokować strumień wejściowy (w zależności od wybranego trybu blokowania), a pliki tymczasowe są używane, gdy jest to dozwolone, co utrzymuje przewidywalne zużycie pamięci podczas przetwarzania.