Bildrahmen in Präsentationen mit Java verwalten

Ein Bildrahmen ist eine Form, die ein Bild enthält – er ist wie ein Bild in einem Rahmen.

Sie können über einen Bildrahmen ein Bild zu einer Folie hinzufügen. Auf diese Weise können Sie das Bild formatieren, indem Sie den Bildrahmen formatieren.

Erstellen eines Bildrahmens

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Holen Sie sich eine Referenz auf eine Folie über deren Index.
  3. Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, das dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
  4. Geben Sie die Breite und Höhe des Bildes an.
  5. Erstellen Sie einen PictureFrame basierend auf der Bildbreite und -höhe über die AddPictureFrame‑Methode, die vom Form‑Objekt der referenzierten Folie bereitgestellt wird.
  6. Fügen Sie der Folie einen Bildrahmen (der das Bild enthält) hinzu.
  7. Speichern Sie die modifizierte Präsentation als PPTX‑Datei.

Dieser Java‑Code zeigt, wie Sie einen Bildrahmen erstellen:

// Instanziiert die Presentation-Klasse, die eine PPTX-Datei darstellt
Presentation pres = new Presentation();
try {
    // Ruft die erste Folie ab
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instanziiert die Image-Klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    // Fügt einen Bildrahmen mit der entsprechenden Höhe und Breite des Bildes hinzu
    sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Schreibt die PPTX-Datei auf die Festplatte
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Erstellen eines Bildrahmens mit relativer Skalierung

Durch Ändern der relativen Skalierung eines Bildes können Sie einen komplexeren Bildrahmen erstellen.

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Holen Sie sich eine Referenz auf eine Folie über deren Index.
  3. Fügen Sie der Bildsammlung der Präsentation ein Bild hinzu.
  4. Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, das dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
  5. Geben Sie die relative Breite und Höhe des Bildes im Bildrahmen an.
  6. Speichern Sie die modifizierte Präsentation als PPTX‑Datei.

Dieser Java‑Code zeigt, wie Sie einen Bildrahmen mit relativer Skalierung erstellen:

// Instanziiert die Presentation-Klasse, die das PPTX darstellt
Presentation pres = new Presentation();
try {
    // Ruft die erste Folie ab
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instanziiert die Image-Klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    
    // Fügt einen Bildrahmen mit Höhe und Breite des Bildes hinzu
    IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Setzt relative Skalierung für Breite und Höhe
    pf.setRelativeScaleHeight(0.8f);
    pf.setRelativeScaleWidth(1.35f);
    
    // Schreibt die PPTX-Datei auf die Festplatte
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Rasterbilder aus Bildrahmen extrahieren

Sie können Rasterbilder aus PictureFrame‑Objekten extrahieren und in PNG, JPG und anderen Formaten speichern. Das untenstehende Code‑Beispiel demonstriert, wie Sie ein Bild aus dem Dokument „sample.pptx“ extrahieren und im PNG‑Format speichern.

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-Bilder aus Bildrahmen extrahieren

Wenn eine Präsentation SVG‑Grafiken enthält, die in PictureFrame‑Formen platziert sind, ermöglicht Aspose.Slides for Java das Abrufen der ursprünglichen Vektorbilder mit voller Treue. Durch Durchlaufen der Form‑Sammlung der Folie können Sie jede PictureFrame‑Form identifizieren, prüfen, ob das zugrunde liegende IPPImage SVG‑Inhalt enthält, und das Bild dann im nativen SVG‑Format auf Datenträger oder in einen Stream speichern.

Das folgende Code‑Beispiel demonstriert das Extrahieren eines SVG‑Bildes aus einem Bildrahmen:

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

Transparenz eines Bildes abrufen

Aspose.Slides ermöglicht das Abrufen des Transparenzeffekts, der auf ein Bild angewendet wurde. Dieser Java‑Code demonstriert die Operation:

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);
    }
}

Bildrahmenformatierung

Aspose.Slides bietet viele Formatierungsoptionen, die auf einen Bildrahmen angewendet werden können. Mit diesen Optionen können Sie einen Bildrahmen so ändern, dass er spezifischen Anforderungen entspricht.

  1. Erstellen Sie eine Instanz der Klasse Presentation.
  2. Holen Sie sich eine Referenz auf eine Folie über deren Index.
  3. Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, das dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
  4. Geben Sie die Breite und Höhe des Bildes an.
  5. Erstellen Sie einen PictureFrame basierend auf der Bildbreite und -höhe über die AddPictureFrame‑Methode, die vom IShapes‑Objekt der referenzierten Folie bereitgestellt wird.
  6. Fügen Sie der Folie den Bildrahmen (der das Bild enthält) hinzu.
  7. Legen Sie die Linienfarbe des Bildrahmens fest.
  8. Legen Sie die Linienbreite des Bildrahmens fest.
  9. Drehen Sie den Bildrahmen, indem Sie ihm einen positiven oder negativen Wert zuweisen.
    • Ein positiver Wert dreht das Bild im Uhrzeigersinn.
    • Ein negativer Wert dreht das Bild gegen den Uhrzeigersinn.
  10. Fügen Sie den Bildrahmen (der das Bild enthält) erneut zur Folie hinzu.
  11. Speichern Sie die modifizierte Präsentation als PPTX‑Datei.

Dieser Java‑Code demonstriert den Bildrahmenformatierungs‑Prozess:

// Instanziert die Presentation-Klasse, die das PPTX darstellt
Presentation pres = new Presentation();
try {
    // Ruft die erste Folie ab
    ISlide sld = pres.getSlides().get_Item(0);
    
    // Instanziert die Image-Klasse
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    // Fügt einen Bildrahmen mit Höhe und Breite des Bildes hinzu
    IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    
    // Wendet einige Formatierungen auf PictureFrameEx an
    pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
    pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
    pf.getLineFormat().setWidth(20);
    pf.setRotation(45);
    
    // Schreibt die PPTX-Datei auf die Festplatte
    pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Um große Präsentationsdateien zu vermeiden, können Sie Bilder (oder Videos) über Links einbinden, anstatt die Dateien direkt in die Präsentation zu integrieren. Dieser Java‑Code zeigt, wie Sie ein Bild und ein Video in einen Platzhalter einfügen:

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

Bilder zuschneiden

Dieser Java‑Code zeigt, wie Sie ein vorhandenes Bild auf einer Folie zuschneiden:

Presentation pres = new Presentation();
// Erstellt ein neues Bildobjekt
try {
    IPPImage picture;
    IImage image = Images.fromFile(imagePath);
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // Fügt einem Folie einen PictureFrame hinzu
    IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
            ShapeType.Rectangle, 100, 100, 420, 250, picture);

    // Schneidet das Bild zu (Prozentwerte)
    picFrame.getPictureFormat().setCropLeft(23.6f);
    picFrame.getPictureFormat().setCropRight(21.5f);
    picFrame.getPictureFormat().setCropTop(3);
    picFrame.getPictureFormat().setCropBottom(31);

    // Speichert das Ergebnis
    pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Zugeschnittene Bereiche eines Bildes löschen

Wenn Sie die zugeschnittenen Bereiche eines in einem Rahmen enthaltenen Bildes entfernen möchten, können Sie die Methode deletePictureCroppedAreas() verwenden. Diese Methode gibt das zugeschnittene Bild oder das Originalbild zurück, wenn kein Zuschnitt nötig ist.

Dieser Java‑Code demonstriert die Operation:

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

    // Holt das PictureFrame von der ersten Folie
    IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);

    // Löscht zugeschnittene Bereiche des Bildes im PictureFrame und gibt das beschnittene Bild zurück
    IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();

    // Speichert das Ergebnis
    presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

Seitenverhältnis sperren

Wenn Sie möchten, dass eine Form, die ein Bild enthält, ihr Seitenverhältnis beibehält, selbst wenn Sie die Bildabmessungen ändern, können Sie die Methode setAspectRatioLocked verwenden, um die Einstellung Lock Aspect Ratio zu setzen.

Dieser Java‑Code zeigt, wie Sie das Seitenverhältnis einer Form sperren:

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

    // Form so einstellen, dass das Seitenverhältnis beim Skalieren erhalten bleibt
    pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Verwendung der StretchOff‑Eigenschaft

Durch die Verwendung der Eigenschaften StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight und StretchOffsetBottom aus dem Interface IPictureFillFormat und der Klasse PictureFillFormat können Sie ein Füllrechteck festlegen.

Wenn für ein Bild ein Stretching angegeben ist, wird ein Quellrechteck skaliert, um in das angegebene Füllrechteck zu passen. Jede Kante des Füllrechtecks wird durch einen prozentualen Versatz von der entsprechenden Kante der Begrenzungsbox der Form definiert. Ein positiver Prozentsatz bedeutet Einzug, ein negativer Prozentsatz Ausbuchtung.

  1. Erstellen Sie eine Instanz der Presentation‑Klasse.
  2. Holen Sie sich eine Referenz auf eine Folie über deren Index.
  3. Fügen Sie ein Rechteck AutoShape hinzu.
  4. Erstellen Sie ein Bild.
  5. Setzen Sie den Fülltyp der Form.
  6. Setzen Sie den Bildfüllmodus der Form.
  7. Fügen Sie ein Bild hinzu, um die Form zu füllen.
  8. Geben Sie Bildversätze von der entsprechenden Kante der Begrenzungsbox der Form an.
  9. Speichern Sie die modifizierte Präsentation als PPTX‑Datei.

Dieser Java‑Code demonstriert einen Prozess, bei dem die StretchOff‑Eigenschaft verwendet wird:

// Instanziert die Presentation-Klasse, die eine PPTX-Datei darstellt
Presentation pres = new Presentation();
try {
    // Ruft die erste Folie ab
    ISlide slide = pres.getSlides().get_Item(0);

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

    // Fügt ein AutoShape vom Typ Rechteck hinzu
    IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);

    // Legt den Fülltyp der Form fest
    aShape.getFillFormat().setFillType(FillType.Picture);

    // Legt den Bildfüllmodus der Form fest
    aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);

    // Setzt das Bild, das die Form füllen soll
    aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);

    // Gibt die Bildversätze von der jeweiligen Kante der Begrenzungsbox der Form an
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
    
    // Schreibt die PPTX-Datei auf die Festplatte
    pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Wie finde ich heraus, welche Bildformate für PictureFrame unterstützt werden?
Aspose.Slides unterstützt sowohl Rasterbilder (PNG, JPEG, BMP, GIF usw.) als auch Vektorbilder (z. B. SVG) über das Bildobjekt, das einem PictureFrame zugewiesen wird. Die unterstützten Formate überschneiden sich im Allgemeinen mit den Fähigkeiten der Folien‑ und Bildkonvertierungs‑Engine.

Wie wirken sich Dutzende großer Bilder auf die PPTX‑Größe und Performance aus?
Das Einbetten großer Bilder erhöht Dateigröße und Speicherverbrauch; das Verlinken von Bildern hält die Präsentationsgröße gering, erfordert jedoch, dass die externen Dateien weiterhin zugänglich bleiben. Aspose.Slides bietet die Möglichkeit, Bilder per Link hinzuzufügen, um die Dateigröße zu reduzieren.

Wie kann ich ein Bildobjekt vor versehentlichem Verschieben/Größenändern schützen?
Verwenden Sie Form‑Sperren für einen PictureFrame (z. B. Verschieben oder Größenändern deaktivieren). Der Sperrmechanismus wird für Formen in einem separaten Schutz‑Artikel beschrieben und wird für verschiedene Formtypen, einschließlich PictureFrame, unterstützt.

Wird die Vektor‑Treue von SVG beim Export einer Präsentation in PDF/Bilder erhalten?
Aspose.Slides ermöglicht das Extrahieren eines SVG aus einem PictureFrame als ursprünglichen Vektor. Beim Export nach PDF oder zu Rasterformaten kann das Ergebnis je nach Exporteinstellungen gerastert werden; dass das ursprüngliche SVG als Vektor gespeichert ist, wird durch das Extraktionsverhalten bestätigt.