Správa BLOBů prezentace v Pythonu přes Java pro efektivní využití paměti

Přehled

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

Tento článek ukazuje, jak použít zpracování založené na BLOB pro přidání velkých médií do prezentace, export velkých médií z prezentace a efektivnější 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 uloženy.

O BLOB

BLOB (Binary Large Object) je obvykle velká položka (fotografie, prezentace, dokument nebo média) uložená v binárním formátu.

Aspose.Slides for Python via Java 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žijte BLOBy ke snížení spotřeby paměti

Přidání velkého souboru do prezentace pomocí BLOBů

Aspose.Slides for Python via Java umožňuje přidávat velké soubory (v tomto případě velký video soubor) pomocí procesu zahrnujícího BLOBy ke snížení spotřeby paměti.

Tento Python kód vám ukazuje, jak přidat velký video soubor pomocí BLOB procesu do prezentace:

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"

# Vytvořte novou prezentaci, do které bude video přidáno.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_very_large_video)
    try:
        # Uchovejte stream uzamčený, protože neplánujeme přistupovat k video souboru.
        video = presentation.getVideos().addVideo(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video)

        # Save the presentation while keeping memory consumption low.
        presentation.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Exportování velkého souboru z prezentace pomocí BLOBů

Aspose.Slides for Python via Java 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žíte spotřebu paměti nízkou.

Tento kód v Pythonu demonstruje popsanou operaci:

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()
# Uzamkněte zdrojový soubor místo načítání do paměti.
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)

presentation = Presentation(huge_presentation_file, load_options)
try:
    # Přeneste video data přes buffer, aby byla spotřeba paměti nízká.
    buffer = jpype.JArray(jpype.JByte)(8 * 1024)

    for index in range(presentation.getVideos().size()):
        video = presentation.getVideos().get_Item(index)

        # Použijte stream místo načítání celého videa do pole bajtů.
        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()
    # V případě potřeby použijte stejné kroky i na audio soubory.
finally:
    presentation.dispose()

Přidání obrázku jako BLOB do prezentace

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

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

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"

# Vytvořte novou prezentaci, do které bude obrázek přidán.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_large_image)
    try:
        # Uchovejte stream uzamčený, protože neplánujeme přistupovat k souboru obrázku.
        image = presentation.getImages().addImage(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, image)

        # Uložte prezentaci při zachování nízké spotřeby paměti.
        presentation.save("presentationWithLargeImage.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Paměť a velké prezentace

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

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

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()

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

Načtení velké prezentace jako BLOB

Pomocí zpracování BLOB můžete načíst velkou prezentaci s malou spotřebou paměti. Tento Python kód ukazuje, jak použít BLOB zpracování k načtení velkého souboru prezentace (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()

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

Když je použit BLOB proces, 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í 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")

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

Při zpracování velkých prezentací zajistěte, aby instance Presentation byla řádně uvolněna, aby byla paměť, kterou zabírala, uvolněna. Po dokončení práce s prezentací zavolejte Presentation.dispose, abyste uvolnili neřízené prostředky.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("large.pptx")
try:
    # ...zpracovat prezentaci...
    presentation.save("large.pdf", SaveFormat.Pdf)
finally:
    # Explicitně uvolněte prostředky.
    presentation.dispose()

Často kladené otázky

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

Velké binární objekty jako obrázky, audio a video jsou považovány za BLOBy. 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řesměrování do dočasných souborů podle potřeby.

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

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

Ovlivňují nastavení BLOB výkon a jak vyvážit rychlost versus paměť?

Ano. Udržování BLOBů v paměti maximalizuje rychlost, ale zvyšuje spotřebu RAM; snížení limitu paměti přesune více práce do dočasných souborů, čímž snižuje RAM za cenu dalšího I/O. Použijte metodu setMaxBlobsBytesInMemory k dosažení správné rovnováhy pro vaše pracovní zatížení a prostředí.

Pomáhají možnosti BLOB při otevírání extrémně velkých prezentací (např. gigabajty)?

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

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 uzamykání) a dočasné soubory jsou používány, pokud jsou povoleny, což udržuje předvídatelnou spotřebu paměti během zpracování.