Správa BLOBů v prezentacích pomocí Pythonu pro efektivní využití paměti

Přehled

Aspose.Slides poskytuje zpracování založené na BLOB pro velké binární údaje v prezentacích, aby pomohlo snížit spotřebu paměti při práci s velkými obrázky, zvukovými soubory, videi a soubory prezentací.

Tento článek ukazuje, jak použít zpracování založené na BLOB k přidání velkých multimédií do prezentace, exportu velkých multimédií z prezentace a efektivnějšímu načítání velkých prezentací. Také vysvětluje, jak lze během zpracování používat dočasné soubory a jak změnit složku, ve které jsou ukládány.

O BLOB

BLOB (Binary Large Object) je obvykle velká položka (fotografie, prezentace, dokument nebo multimédium) uložená v binárních formátech.

Aspose.Slides for Python via .NET vám umožňuje používat BLOBy pro objekty způsobem, který snižuje spotřebu paměti při práci s velkými soubory.

Použití BLOB ke snížení spotřeby paměti

Přidání velkého souboru přes BLOB do prezentace

Aspose.Slides pro .NET vám umožňuje přidávat velké soubory (v tomto případě velký video soubor) pomocí procesu zahrnujícího BLOBy, čímž snižuje spotřebu paměti.

Tento příklad v Pythonu ukazuje, jak přidat velký video soubor pomocí BLOB procesu do prezentace:

import aspose.slides as slides

pathToVeryLargeVideo = "veryLargeVideo.avi"

# Vytvoří novou prezentaci, do které bude video přidáno
with slides.Presentation() as pres:
    with open(pathToVeryLargeVideo, "br") as fileStream:
        # Přidáme video do prezentace – zvolili jsme chování KeepLocked, protože
        # neplánujeme přistupovat k souboru "veryLargeVideo.avi".
        video = pres.videos.add_video(fileStream, slides.LoadingStreamBehavior.KEEP_LOCKED)
        pres.slides[0].shapes.add_video_frame(0, 0, 480, 270, video)

        # Uloží prezentaci. I když je vytvořena velká prezentace, spotřeba paměti
        # zůstává nízká během životního cyklu objektu pres 
        pres.save("presentationWithLargeVideo.pptx", slides.export.SaveFormat.PPTX)

Export velkého souboru přes BLOB z prezentace

Aspose.Slides for Python via .NET vám umožňuje exportovat velké soubory (v tomto případě audio nebo video soubor) pomocí procesu zahrnujícího BLOBy z prezentací. Například můžete potřebovat extrahovat velký mediální soubor z prezentace, ale nechcete, aby byl soubor načten do paměti počítače. Exportováním souboru pomocí BLOB procesu udržujete nízkou spotřebu paměti.

Tento kód v Pythonu demonstruje popsanou operaci:

import aspose.slides as slides

loadOptions = slides.LoadOptions()
loadOptions.blob_management_options = slides.BlobManagementOptions()
loadOptions.blob_management_options.presentation_locking_behavior = slides.PresentationLockingBehavior.KEEP_LOCKED
loadOptions.blob_management_options.is_temporary_files_allowed = True

with slides.Presentation(path + "Video.pptx", loadOptions) as pres:
	# Uložíme každé video do souboru. Abychom předešli vysoké spotřebě paměti, potřebujeme buffer, který bude použit
	# k přenosu dat z video proudu prezentace do proudu pro nově vytvořený video soubor.
	# byte[] buffer = new byte[8 * 1024];
    bufferSize = 8 * 1024

	# Prochází videa
    index = 0
    # V případě potřeby můžete použít stejné kroky i pro audio soubory. 
    for video in pres.videos:
		# Otevře video proud prezentace. Všimněte si, že jsme záměrně vyhnuli přístupu k vlastnostem
		# jako video.BinaryData - protože tato vlastnost vrací pole bytů obsahující celé video, což pak
		# způsobí načtení bytů do paměti. Používáme video.GetStream, který vrátí Stream - a NE
		#  vyžaduje, abychom načetli celé video do paměti.
        with video.get_stream() as presVideoStream:
            with open("video{index}.avi".format(index = index), "wb") as outputFileStream:
                buffer = presVideoStream.read(8 * 1024)
                bytesRead = len(buffer)
                while bytesRead > 0:
                    outputFileStream.write(buffer)
                    buffer = presVideoStream.read(8 * 1024)
                    bytesRead = len(buffer)
                    
        index += 1

Přidání obrázku jako BLOB v prezentaci

Pomocí metod ze třídy ImageCollection můžete přidat velký obrázek jako proud, aby byl považován za BLOB.

Tento kód v Pythonu ukazuje, jak přidat velký obrázek pomocí BLOB procesu:

import aspose.slides as slides

# vytvoří novou prezentaci, do které bude obrázek přidán.
with slides.Presentation() as pres:
    with open("img.jpeg", "br") as fileStream:
        img = pres.images.add_image(fileStream, slides.LoadingStreamBehavior.KEEP_LOCKED)
        pres.slides[0].shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 0, 0, 300, 200, img)
    pres.save("presentationWithLargeImage.pptx", slides.export.SaveFormat.PPTX)

Paměť a velké prezentace

Obvykle pro načtení velké prezentace počítače potřebují hodně dočasné paměti. Veškerý obsah prezentace je načten do paměti a soubor (ze kterého byla prezentace načtena) se přestane používat.

Uvažujte o velké PowerPoint prezentaci (large.pptx), která obsahuje 1,5 GB video soubor. Standardní metoda načtení prezentace je popsána v tomto Python kódu:

import aspose.slides as slides

with slides.Presentation("large.pptx") as pres:
	pres.save("large.pdf", slides.export.SaveFormat.PDF)

Avšak tato metoda spotřebuje přibližně 1,6 GB dočasné paměti.

Načtení velké prezentace jako BLOB

Pomocí procesu zahrnujícího BLOB můžete načíst velkou prezentaci při malém využití paměti. Tento Python kód popisuje implementaci, kde se proces BLOB používá k načtení velkého souboru prezentace (large.pptx):

import aspose.slides as slides

loadOptions = slides.LoadOptions()
loadOptions.blob_management_options = slides.BlobManagementOptions()
loadOptions.blob_management_options.presentation_locking_behavior = slides.PresentationLockingBehavior.KEEP_LOCKED
loadOptions.blob_management_options.is_temporary_files_allowed = True

with slides.Presentation("large.pptx", loadOptions) as pres:
	pres.save("large.pdf", slides.export.SaveFormat.PDF)

Změna složky pro dočasné soubory

Když je použit proces BLOB, váš počítač vytváří dočasné soubory ve výchozí složce pro dočasné soubory. Pokud chcete, aby byly dočasné soubory uloženy v jiné složce, můžete změnit nastavení úložiště pomocí temp_files_root_path:

import aspose.slides as slides

loadOptions = slides.LoadOptions()
loadOptions.blob_management_options = slides.BlobManagementOptions()
loadOptions.blob_management_options.presentation_locking_behavior = slides.PresentationLockingBehavior.KEEP_LOCKED
loadOptions.blob_management_options.is_temporary_files_allowed = True
loadOptions.blob_management_options.temp_files_root_path = "temp"

Uvolnění objektů prezentace pro uvolnění paměti

Při zpracování velkých prezentací se ujistěte, že instance Presentation je řádně uvolněna, aby byla uvolněna paměť, kterou zabírala. Doporučený způsob je použít kontextový manažer (with slides.Presentation(...) as presentation:) jako je ukázáno v příkladech výše; automaticky uzavře prezentaci a uvolní neřízené prostředky při opuštění bloku.

Pokud vytvoříte prezentaci bez bloku with, explicitně zavolejte presentation.dispose() poté, co jste ji dokončili používat, a odstraňte všechny zbývající reference, aby garbage collector v Pythonu mohl uvolnit paměť.

import aspose.slides as slides

presentation = slides.Presentation("large.pptx")

# ...zpracovat prezentaci...
presentation.save("large.pdf", slides.export.SaveFormat.PDF)

# Výslovně uvolnit prostředky.
presentation.dispose()

Často kladené dotazy

Jaká data v prezentaci Aspose.Slides jsou považována za BLOB a řízena nastavením BLOB?

Velké binární objekty, jako jsou obrázky, audio a video, jsou považovány za BLOB. Celý soubor prezentace také zahrnuje zpracování BLOB při načítání nebo ukládání. Tyto objekty jsou řízeny politikami BLOB, které vám umožňují spravovat využití paměti a přelévat data do dočasných souborů podle potřeby.

Kde mohu nakonfigurovat pravidla zpracování BLOB během načítání prezentace?

Použijte LoadOptions spolu s BlobManagementOptions. Zde nastavíte limit paměti pro BLOB, povolíte či zakážete dočasné soubory, zvolíte kořenovou cestu pro dočasné soubory a vyberete chování zamykání zdroje.

Ovlivňují nastavení BLOB výkon a jak najít rovnováhu mezi rychlostí a pamětí?

Ano. Udržování BLOB v paměti maximalizuje rychlost, ale zvyšuje spotřebu RAM; snížením limitu paměti se více práce přesune do dočasných souborů, což snižuje RAM za cenu dalšího vstupně‑výstupního provozu. Laděním prahu max_blobs_bytes_in_memory dosáhnete vhodné rovnováhy pro své zatížení a prostředí.

Pomáhají nastavení BLOB při otevírání extrémně velkých prezentací (např. v gigabytech)?

Ano. BlobManagementOptions jsou navrženy pro takové scénáře: povolení dočasných souborů a použití zamykání zdroje může výrazně snížit špičkovou spotřebu RAM a stabilizovat zpracování velmi velkých sad.

Mohu použít politiky BLOB při načítání ze streamů místo souborů na disku?

Ano. Stejná pravidla platí pro streamy: instance prezentace může vlastnit a zamknout vstupní stream (v závislosti na zvoleném režimu zamykání) a dočasné soubory jsou používány, když je to povoleno, čímž se udržuje předvídatelné využití paměti během zpracování.