Beheer presentatie-BLOB's in Python via Java voor efficiënt geheugengebruik

Overzicht

Aspose.Slides biedt BLOB‑gebaseerde verwerking voor grote binaire gegevens in presentaties om het geheugengebruik te verminderen bij het werken met grote afbeeldingen, audio, video en presentatiebestanden.

Dit artikel laat zien hoe u BLOB‑gebaseerde verwerking kunt gebruiken om grote media toe te voegen aan een presentatie, grote media uit een presentatie te exporteren en grote presentaties efficiënter te laden. Het legt ook uit hoe tijdelijke bestanden kunnen worden gebruikt tijdens de verwerking en hoe u de map kunt wijzigen waarin ze worden opgeslagen.

Over BLOB

Een BLOB (Binary Large Object) is meestal een groot item (foto, presentatie, document of media) dat wordt opgeslagen in binaire formaten.

Aspose.Slides voor Python via Java stelt u in staat BLOB’s te gebruiken voor objecten op een manier die het geheugengebruik vermindert wanneer er grote bestanden bij betrokken zijn.

BLOB’s gebruiken om het geheugengebruik te verminderen

Een groot bestand toevoegen aan een presentatie met BLOB’s

Aspose.Slides voor Python via Java stelt u in staat grote bestanden (in dit geval een groot videobestand) toe te voegen via een BLOB‑proces om het geheugengebruik te verminderen.

Deze Python‑code laat zien hoe u een groot videobestand via het BLOB‑proces aan een presentatie toevoegt:

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"

# Maak een nieuwe presentatie waaraan de video wordt toegevoegd.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_very_large_video)
    try:
        # Laat de stream vergrendeld, want we zijn niet van plan het videobestand te benaderen.
        video = presentation.getVideos().addVideo(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video)

        # Sla de presentatie op terwijl het geheugengebruik laag blijft.
        presentation.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Een groot bestand exporteren uit een presentatie met BLOB’s

Aspose.Slides voor Python via Java stelt u in staat grote bestanden (in dit geval een audio‑ of videobestand) via een BLOB‑proces uit presentaties te exporteren. Bijvoorbeeld, u moet misschien een groot mediabestand uit een presentatie halen, maar wilt niet dat het bestand in het geheugen van uw computer wordt geladen. Door het bestand via het BLOB‑proces te exporteren, blijft het geheugengebruik laag.

Deze code in Python demonstreert de beschreven handeling:

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()
# Vergrendel het bronbestand in plaats van het in het geheugen te laden.
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)

presentation = Presentation(huge_presentation_file, load_options)
try:
    # Verplaats videogegevens via een buffer om het geheugengebruik laag te houden.
    buffer = jpype.JArray(jpype.JByte)(8 * 1024)

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

        # Gebruik de stream in plaats van de volledige video in een byte-array te laden.
        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()
    # Indien nodig, pas dezelfde stappen toe op audiobestanden.
finally:
    presentation.dispose()

Een afbeelding toevoegen als BLOB aan een presentatie

Met methoden uit de ImageCollection‑klasse kunt u een grote afbeelding als stream toevoegen zodat deze wordt behandeld als een BLOB.

Deze Python‑code laat zien hoe u een grote afbeelding via het BLOB‑proces toevoegt:

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"

# Maak een nieuwe presentatie waaraan de afbeelding wordt toegevoegd.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_large_image)
    try:
        # Houd de stream vergrendeld omdat we het afbeeldingsbestand niet gaan benaderen.
        image = presentation.getImages().addImage(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, image)

        # Sla de presentatie op terwijl het geheugengebruik laag blijft.
        presentation.save("presentationWithLargeImage.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Geheugen en grote presentaties

Doorgaans hebben computers veel tijdelijk geheugen nodig om een grote presentatie te laden. De gehele inhoud van de presentatie wordt in het geheugen geladen en het bestand (waaruit de presentatie werd geladen) wordt niet meer gebruikt.

Beschouw een grote PowerPoint‑presentatie (large.pptx) die een videobestand van 1,5 GB bevat. De standaardmethode voor het laden van de presentatie staat beschreven in deze Python‑code:

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

Maar deze methode verbruikt ongeveer 1,6 GB tijdelijk geheugen.

Een grote presentatie laden als BLOB

Door BLOB‑verwerking te gebruiken kunt u een grote presentatie laden met weinig geheugen. Deze Python‑code laat zien hoe u BLOB‑verwerking gebruikt om een groot presentatied bestand (large.pptx) te laden:

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

De map voor tijdelijke bestanden wijzigen

Wanneer het BLOB‑proces wordt gebruikt, maakt uw computer tijdelijke bestanden aan in de standaardmap voor tijdelijke bestanden. Als u wilt dat de tijdelijke bestanden in een andere map worden bewaard, kunt u de opslaginstellingen wijzigen met behulp van 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")

Presentatie‑objecten vrijgeven om geheugen vrij te maken

Bij het verwerken van grote presentaties moet u ervoor zorgen dat de Presentation‑instantie correct wordt vrijgegeven zodat het geheugen dat het gebruikte wordt vrijgegeven. Roep Presentation.dispose aan nadat u klaar bent met de presentatie om niet‑beheerde resources vrij te maken.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("large.pptx")
try:
    # ...verwerk de presentatie...
    presentation.save("large.pdf", SaveFormat.Pdf)
finally:
    # Resources expliciet vrijgeven.
    presentation.dispose()

FAQ

Welke gegevens in een Aspose.Slides‑presentatie worden behandeld als BLOB en beheerd door BLOB‑opties?

Grote binaire objecten zoals afbeeldingen, audio en video worden behandeld als BLOB’s. Het volledige presentatied bestand wordt ook via BLOB‑verwerking behandeld bij het laden of opslaan. Deze objecten worden beheerd door BLOB‑beleid waarmee u het geheugengebruik kunt regelen en naar tijdelijke bestanden kunt uitrollen wanneer dat nodig is.

Waar kan ik BLOB‑verwerkingsregels configureren tijdens het laden van een presentatie?

Gebruik LoadOptions in combinatie met BlobManagementOptions. Daar stelt u de in‑memory‑limiet voor BLOB’s in, staat u tijdelijke bestanden toe of niet, kiest u de hoofdmap voor tijdelijke bestanden en selecteert u het vergrendelingsgedrag van de bron.

Hebben BLOB‑instellingen invloed op de prestaties, en hoe balanceer ik snelheid versus geheugen?

Ja. BLOB’s in het geheugen houden maximaliseert de snelheid maar vergroot het RAM‑verbruik; het verlagen van de geheugenlimiet verplaatst meer werk naar tijdelijke bestanden, waardoor RAM wordt bespaard ten koste van extra I/O. Gebruik de setMaxBlobsBytesInMemory‑methode om de juiste balans voor uw workload en omgeving te vinden.

Helpen BLOB‑opties bij het openen van extreem grote presentaties (bijv. gigabytes)?

Ja. BlobManagementOptions is ontworpen voor dergelijke scenario’s: het inschakelen van tijdelijke bestanden en het gebruiken van bronvergrendeling kan het piek‑RAM‑verbruik aanzienlijk verminderen en de verwerking van zeer grote presentaties stabiliseren.

Kan ik BLOB‑beleid gebruiken bij het laden vanuit streams in plaats van schijfbestanden?

Ja. dezelfde regels gelden voor streams: de presentatie‑instantie kan de invoer‑stream bezitten en vergrendelen (afhankelijk van de gekozen vergrendelingsmodus), en tijdelijke bestanden worden gebruikt wanneer toegestaan, waardoor het geheugengebruik tijdens de verwerking voorspelbaar blijft.