Beheer afbeeldingskaders in presentaties op Android

Inleiding

Een afbeeldingskader is een vorm die een afbeelding bevat – het is als een foto in een lijst.

U kunt een afbeelding aan een dia toevoegen via een afbeeldingskader. Op deze manier kunt u de afbeelding opmaken door het afbeeldingskader op te maken.

Maak een afbeeldingskader

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal een verwijzing naar een dia op via de index.
  3. Maak een IPPImage‑object aan door een afbeelding toe te voegen aan de IImagescollection die bij het presentatietoObject is gekoppeld en die wordt gebruikt om de vorm te vullen.
  4. Geef de breedte en hoogte van de afbeelding op.
  5. Maak een PictureFrame aan op basis van de breedte en hoogte van de afbeelding via de AddPictureFrame‑methode die beschikbaar is op het vorm‑object dat aan de betreffende dia is gekoppeld.
  6. Voeg een afbeeldingskader (met de foto) toe aan de dia.
  7. Schrijf de aangepaste presentatie weg als een PPTX‑bestand.

Deze Java‑code laat zien hoe u een afbeeldingskader maakt:

// Instantieert de Presentation-klasse die een PPTX‑bestand vertegenwoordigt
Presentation pres = new Presentation();
try {
    // Haalt de eerste dia op
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instantieert de Image‑klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    // Voegt een afbeeldingskader toe met de equivalente hoogte en breedte van de afbeelding
    sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Schrijft het PPTX‑bestand naar de schijf
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Maak een afbeeldingskader met relatieve schaal

Door de relatieve schaal van een afbeelding aan te passen, kunt u een complexer afbeeldingskader maken.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal een verwijzing naar een dia op via de index.
  3. Voeg een afbeelding toe aan de afbeeldingencollectie van de presentatie.
  4. Maak een IPPImage‑object aan door een afbeelding toe te voegen aan de IImagescollection die bij het presentatietoObject is gekoppeld en die wordt gebruikt om de vorm te vullen.
  5. Geef de relatieve breedte en hoogte van de afbeelding op in het afbeeldingskader.
  6. Schrijf de aangepaste presentatie weg als een PPTX‑bestand.

De volgende Java‑code laat zien hoe u een afbeeldingskader met relatieve schaal maakt:

// Instantieer de Presentation-klasse die de PPTX vertegenwoordigt
Presentation pres = new Presentation();
try {
    // Haal de eerste dia op
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instantieer de Image-klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    
    // Voeg een afbeeldingskader toe met hoogte en breedte gelijk aan de afbeelding
    IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Instellen van relatieve schaalbreedte en -hoogte
    pf.setRelativeScaleHeight(0.8f);
    pf.setRelativeScaleWidth(1.35f);
    
    // Schrijf het PPTX-bestand naar de schijf
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Rasterafbeeldingen extraheren uit afbeeldingskaders

U kunt rasterafbeeldingen extraheren uit PictureFrame‑objecten en opslaan in PNG, JPG en andere formaten. Het onderstaande code‑voorbeeld laat zien hoe u een afbeelding uit het document “sample.pptx” haalt en opslaat in PNG‑formaat.

Presentation presentation = new Presentation("sample.pptx");

try {
    ISlide firstSlide = presentation.getSlides().get_Item(0);
    IShape firstShape = firstSlide.getShapes().get_Item(0);

    if (firstShape instanceof IPictureFrame) {
        IPictureFrame pictureFrame = (IPictureFrame) firstShape;
        try {
			IImage slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
			slideImage.save("slide_1_shape_1.png", ImageFormat.Png);
		} finally {
			if (slideImage != null) slideImage.dispose();
		}
    }
} catch (IOException e) {
} finally {
    presentation.dispose();
}

SVG‑afbeeldingen extraheren uit afbeeldingskaders

Wanneer een presentatie SVG‑grafische elementen bevat die in PictureFrame‑vormen zijn geplaatst, geeft Aspose.Slides voor Android via Java u de mogelijkheid om de oorspronkelijke vectorafbeeldingen met volledige nauwkeurigheid op te halen. Door de vormencollectie van de dia te doorlopen, kunt u elke PictureFrame identificeren, controleren of de onderliggende IPPImage SVG‑inhoud bevat, en vervolgens die afbeelding opslaan op schijf of in een stream in het native SVG‑formaat.

Het volgende code‑voorbeeld toont hoe u een SVG‑afbeelding uit een afbeeldingskader kunt extraheren:

Presentation presentation = new Presentation("sample.pptx");

try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IShape shape = slide.getShapes().get_Item(0);

    if (shape instanceof IPictureFrame) {
        IPictureFrame pictureFrame = (IPictureFrame) shape;
        ISvgImage svgImage = pictureFrame.getPictureFormat().getPicture().getImage().getSvgImage();

        FileOutputStream fos = new FileOutputStream("output.svg");
        fos.write(svgImage.getSvgData());
        fos.close();
    }
} catch (IOException e) {
    System.out.println(e.getMessage());
} finally {
    presentation.dispose();
}

Transparantie van een afbeelding ophalen

Aspose.Slides stelt u in staat de toegepaste transparantie‑effecten van een afbeelding op te halen. Deze Java‑code demonstreert de bewerking:

Presentation presentation = new Presentation("Test.pptx");

var pictureFrame = (IPictureFrame) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var effect : imageTransform) {
    if (effect instanceof IAlphaModulateFixed) {
        var alphaModulateFixed = (IAlphaModulateFixed) effect;
        var transparencyValue = 100 - alphaModulateFixed.getAmount();
        System.out.println("Picture transparency: " + transparencyValue);
    }
}

Helderheid en contrast van een afbeelding ophalen

Aspose.Slides stelt u in staat de helderheid‑ en contrast‑effecten van een afbeelding op te halen. De ILuminance‑interface vertegenwoordigt dit beeldtransformatie‑effect.

Deze Java‑code laat zien hoe u de helderheid‑ en contrastinstellingen van een afbeeldingskader kunt opvragen:

Presentation presentation = new Presentation("sample.pptx");

try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IShape shape = slide.getShapes().get_Item(0);
    IPictureFrame pictureFrame = (IPictureFrame) shape;

    IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    for (IImageTransformOperation effect : imageTransform) {
        if (effect instanceof ILuminance) {
            ILuminanceEffectiveData luminance = ((ILuminance) effect).getEffective();
            float brightness = luminance.getBrightness();
            float contrast = luminance.getContrast();

            System.out.println("Brightness: " + brightness);
            System.out.println("Contrast: " + contrast);
        }
    }
} finally {
    presentation.dispose();
}

Opmaak van afbeeldingskader

Aspose.Slides biedt tal van opmaakopties die op een afbeeldingskader kunnen worden toegepast. Met die opties kunt u een afbeeldingskader aanpassen zodat het aan specifieke eisen voldoet.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal een verwijzing naar een dia op via de index.
  3. Maak een IPPImage‑object aan door een afbeelding toe te voegen aan de IImagescollection die bij het presentatietoObject is gekoppeld en die wordt gebruikt om de vorm te vullen.
  4. Geef de breedte en hoogte van de afbeelding op.
  5. Maak een PictureFrame aan op basis van de breedte en hoogte van de afbeelding via de AddPictureFrame‑methode die beschikbaar is op het IShapes‑object dat bij de betreffende dia is gekoppeld.
  6. Voeg het afbeeldingskader (met de foto) toe aan de dia.
  7. Stel de lijnkleur van het afbeeldingskader in.
  8. Stel de lijndikte van het afbeeldingskader in.
  9. Draai het afbeeldingskader door een positieve of negatieve waarde op te geven.
    • Een positieve waarde roteert de afbeelding met de klok mee.
    • Een negatieve waarde roteert de afbeelding tegen de klok in.
  10. Voeg het afbeeldingskader (met de foto) opnieuw toe aan de dia.
  11. Schrijf de aangepaste presentatie weg als een PPTX‑bestand.

Deze Java‑code laat de opmaakprocedure van een afbeeldingskader zien:

// Instantieert de Presentation-klasse die de PPTX vertegenwoordigt
Presentation pres = new Presentation();
try {
    // Haal de eerste dia op
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instantieert de Image-klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    // Voegt een afbeeldingskader toe met dezelfde hoogte en breedte als de afbeelding
    IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Past enige opmaak toe op PictureFrameEx
    pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
    pf.getLineFormat().setWidth(20);
    pf.setRotation(45);
    
    // Schrijft het PPTX-bestand naar de schijf
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Om grote presentaties te vermijden, kunt u afbeeldingen (of video’s) via koppelingen toevoegen in plaats van de bestanden direct in de presentatie in te sluiten. Deze Java‑code toont hoe u een afbeelding en video aan een placeholder toevoegt:

Presentation presentation = new Presentation("input.pptx");
try {
    ArrayList<IShape> shapesToRemove = new ArrayList<IShape>();
    int shapesCount = presentation.getSlides().get_Item(0).getShapes().size();

    for (int i = 0; i < shapesCount; i++)
    {
        IShape autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);

        if (autoShape.getPlaceholder() == null)
        {
            continue;
        }

        switch (autoShape.getPlaceholder().getType())
        {
            case PlaceholderType.Picture:
                IPictureFrame pictureFrame = presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle,
                        autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), null);

                pictureFrame.getPictureFormat().getPicture().setLinkPathLong(
                        "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");

                shapesToRemove.add(autoShape);
                break;

            case PlaceholderType.Media:
                IVideoFrame videoFrame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(
                        autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), "");

                videoFrame.getPictureFormat().getPicture().setLinkPathLong(
                        "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");

                videoFrame.setLinkPathLong("https://youtu.be/t_1LYZ102RA");

                shapesToRemove.add(autoShape);
                break;
        }
    }

    for (IShape shape : shapesToRemove)
    {
        presentation.getSlides().get_Item(0).getShapes().remove(shape);
    }

    presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

Afbeeldingen bijsnijden

Deze Java‑code laat zien hoe u een bestaande afbeelding op een dia bijsnijdt:

Presentation pres = new Presentation();
// Creëert een nieuw afbeeldingobject
try {
    IPPImage picture;
    IImage image = Images.fromFile(imagePath);
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // Voegt een PictureFrame toe aan een dia
    IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
            ShapeType.Rectangle, 100, 100, 420, 250, picture);

    // Bijsnijdt de afbeelding (percentuele waarden)
    picFrame.getPictureFormat().setCropLeft(23.6f);
    picFrame.getPictureFormat().setCropRight(21.5f);
    picFrame.getPictureFormat().setCropTop(3);
    picFrame.getPictureFormat().setCropBottom(31);

    // Slaat het resultaat op
    pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Bijgesneden gebieden van een afbeelding verwijderen

Als u de bijgesneden gebieden van een afbeelding in een kader wilt verwijderen, kunt u de deletePictureCroppedAreas()‑methode gebruiken. Deze methode geeft de bijgesneden afbeelding terug, of de oorspronkelijke afbeelding als bijsnijden niet nodig is.

Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // Haalt het PictureFrame op van de eerste dia
    IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);

    // Verwijdert bijgesneden gebieden van de PictureFrame-afbeelding en geeft de bijgesneden afbeelding terug
    IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();

    // Slaat het resultaat op
    presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

Afbeeldingen comprimeren

U kunt een afbeelding in een presentatie comprimeren met de IPictureFillFormat.compressImage‑methode. Deze methode comprimeert een afbeelding door de grootte te verkleinen op basis van de vormgrootte en de opgegeven resolutie, met de mogelijkheid om bijgesneden gebieden te verwijderen.

Het past de grootte en resolutie van de afbeelding aan, vergelijkbaar met de functie Afbeeldingsopmaak > Afbeeldingen comprimeren > Resolutie van PowerPoint.

De volgende Java‑voorbeelden tonen hoe u een afbeelding in een presentatie comprimeert door een doelresolutie op te geven en eventueel bijgesneden gebieden te verwijderen:

Presentation presentation = new Presentation("demo.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);

    // Comprimeer de afbeelding met een doelresolutie van 150 DPI (webresolutie) en verwijder bijgesneden gebieden.
    boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);

    // Controleer het resultaat van de compressie.
    if (result) {
        System.out.println("Image successfully compressed.");
    } else {
        System.out.println("Image compression failed or no changes were necessary.");
    }

    presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Of door direct een aangepaste DPI‑waarde te gebruiken:

Presentation presentation = new Presentation("demo.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);

    // Comprimeer de afbeelding tot 150 DPI (webresolutie), en verwijder bijgesneden gebieden.
    pictureFrame.getPictureFormat().compressImage(true, 150f);

    presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Lock Aspect Ratio

Als u wilt dat een vorm met een afbeelding zijn aspectratio behoudt, ook nadat u de afmetingen van de afbeelding wijzigt, kunt u de setAspectRatioLocked‑methode gebruiken om de Lock Aspect Ratio‑instelling in te stellen.

Deze Java‑code laat zien hoe u de aspectratio van een vorm kunt vergrendelen:

Presentation pres = new Presentation("pres.pptx");
try {
    ILayoutSlide layout = pres.getLayoutSlides().getByType(SlideLayoutType.Custom);
    ISlide emptySlide = pres.getSlides().addEmptySlide(layout);
    IPPImage picture;
    IImage image = Images.fromFile("image.png");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }
    IPictureFrame pictureFrame = emptySlide.getShapes().addPictureFrame(
            ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);

    // stel vorm in om de aspectratio te behouden bij het schalen
    pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Gebruik de StretchOff‑eigenschap

Door de eigenschappen StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight en StretchOffsetBottom van de IPictureFillFormat‑interface en de PictureFillFormat‑klasse kunt u een vulrechthoek specificeren.

Wanneer rekken voor een afbeelding wordt gespecificeerd, wordt een bronrechthoek geschaald zodat deze past in de opgegeven vulrechthoek. Elke rand van de vulrechthoek wordt gedefinieerd door een percentage‑offset ten opzichte van de overeenkomstige rand van de begrenzingsdoos van de vorm. Een positief percentage geeft een inset aan, een negatief percentage een outset.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal een verwijzing naar een dia op via de index.
  3. Voeg een rechthoekige AutoShape toe.
  4. Maak een afbeelding.
  5. Stel het opvultype van de vorm in.
  6. Stel de opvulmodus van de afbeelding in.
  7. Voeg een afbeelding toe om de vorm te vullen.
  8. Geef afbeeldingsoffsets op ten opzichte van de overeenkomstige rand van de vormbegrenzing.
  9. Schrijf de aangepaste presentatie weg als een PPTX‑bestand.

Deze Java‑code toont een proces waarbij een StretchOff‑eigenschap wordt gebruikt:

// Instantieert de Presentation-klasse die een PPTX‑bestand vertegenwoordigt
Presentation pres = new Presentation();
try {
    // Haalt de eerste dia op
    ISlide slide = pres.getSlides().get_Item(0);

    // Instantieert de ImageEx-klasse
    IPPImage picture;
    IImage image = Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // Voegt een AutoShape toe ingesteld op Rectangle
    IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);

    // Stelt het opvultype van de vorm in
    aShape.getFillFormat().setFillType(FillType.Picture);

    // Stelt de picture‑fill‑modus van de vorm in
    aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);

    // Stelt de afbeelding in om de vorm te vullen
    aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);

    // Specifieert de afbeeldingsoffsets vanaf de overeenkomstige rand van de begrenzingsdoos van de vorm
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
    
    // Schrijft het PPTX‑bestand naar de schijf
    pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Hoe kan ik achterhalen welke afbeeldingformaten ondersteund worden voor PictureFrame?

Aspose.Slides ondersteunt zowel rasterafbeeldingen (PNG, JPEG, BMP, GIF, enz.) als vectorafbeeldingen (bijvoorbeeld SVG) via het afbeeldingobject dat aan een PictureFrame is toegewezen. De lijst met ondersteunde formaten overlapt doorgaans met de mogelijkheden van de dia‑ en afbeeldingconversie‑engine.

Hoe beïnvloedt het toevoegen van tientallen grote afbeeldingen de grootte en prestaties van een PPTX?

Het insluiten van grote afbeeldingen vergroot de bestandsgrootte en het geheugengebruik; afbeeldingen via koppelingen toevoegen houdt de presentatiesize kleiner, maar vereist dat de externe bestanden toegankelijk blijven. Aspose.Slides biedt de mogelijkheid om afbeeldingen via link toe te voegen om de bestandsgrootte te reduceren.

Hoe kan ik een afbeelding vergrendelen zodat deze niet per ongeluk wordt verplaatst of geschaald?

Gebruik vormvergrendelingen voor een PictureFrame (bijvoorbeeld verplaatsen of schalen uitschakelen). Het vergrendelingsmechanisme wordt ondersteund voor diverse vormtypes, inclusief PictureFrame.

Wordt de vector‑fideliteit van SVG behouden bij exporteren van een presentatie naar PDF/afbeeldingen?

Aspose.Slides maakt het mogelijk een SVG uit een PictureFrame te extraheren als de originele vector. Bij het exporteren naar PDF of naar rasterformaten [./slides/nl/androidjava/convert-powerpoint-to-png/], kan het resultaat gerasterd worden afhankelijk van de exportinstellingen; het feit dat de originele SVG als vector wordt opgeslagen, wordt bevestigd door het extractiegedrag.