Verwalten von Bildrahmen in Präsentationen auf Android
Einleitung
Ein Bildrahmen ist eine Form, die ein Bild enthält – er ist wie ein Bild in einem Rahmen.
Sie können ein Bild über einen Bildrahmen zu einer Folie hinzufügen. Auf diese Weise können Sie das Bild formatieren, indem Sie den Bildrahmen formatieren.
Tip
Aspose stellt kostenlose Konverter—JPEG to PowerPoint und PNG to PowerPoint—zur Verfügung, mit denen Sie schnell Präsentationen aus Bildern erstellen können.Erstellen eines Bildrahmens
- Erstellen Sie eine Instanz der Klasse Presentation.
- Holen Sie sich die Referenz einer Folie über ihren Index.
- Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, die dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
- Geben Sie die Breite und Höhe des Bildes an.
- Erstellen Sie ein PictureFrame basierend auf der Breite und Höhe des Bildes über die Methode
AddPictureFrame, die vom Form‑Objekt bereitgestellt wird, das der referenzierten Folie zugeordnet ist. - Fügen Sie der Folie einen Bildrahmen (der das Bild enthält) hinzu.
- Schreiben Sie die geänderte Präsentation als PPTX‑Datei.
Dieser Java‑Code zeigt, wie ein Bildrahmen erstellt wird:
// Instanziert die Presentation-Klasse, die eine PPTX-Datei repräsentiert
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 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.
- Erstellen Sie eine Instanz der Klasse Presentation.
- Holen Sie sich die Referenz einer Folie über ihren Index.
- Fügen Sie ein Bild zur Bildsammlung der Präsentation hinzu.
- Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, die dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
- Geben Sie die relative Breite und Höhe des Bildes im Bildrahmen an.
- Schreiben Sie die geänderte Präsentation als PPTX‑Datei.
Dieser Java‑Code zeigt, wie ein Bildrahmen mit relativer Skalierung erstellt wird:
// Instanziert die Presentation-Klasse, die das PPTX repräsentiert
Presentation pres = new Presentation();
try {
// Holt die erste Folie
ISlide sld = pres.getSlides().get_Item(0);
// Instanziert die Image-Klasse
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Bildrahmen mit Höhe und Breite des Bildes hinzufügen
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 sie im PNG-, JPG- und anderen Formaten speichern. Das Codebeispiel unten zeigt, wie ein Bild aus dem Dokument “sample.pptx” extrahiert und im PNG-Format gespeichert wird.
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 für Android via Java das Abrufen der ursprünglichen Vektorbilder mit voller Treue. Durch das Durchlaufen der Formensammlung der Folie können Sie jedes PictureFrame identifizieren, prüfen, ob das zugrunde liegende IPPImage SVG‑Inhalt enthält, und das Bild anschließend auf Datenträger oder in einen Stream im nativen SVG‑Format speichern.
Das folgende Codebeispiel demonstriert, wie ein SVG‑Bild aus einem Bildrahmen extrahiert wird:
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 Vorgehensweise:
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);
}
}
Helligkeit und Kontrast eines Bildes abrufen
Aspose.Slides ermöglicht das Abrufen von Helligkeits‑ und Kontrasteffekten, die auf ein Bild angewendet wurden. Das Interface ILuminance stellt diesen Bildtransformations‑Effekt dar.
Dieser Java‑Code zeigt, wie die Helligkeits‑ und Kontrasteinstellungen eines Bildrahmens abgerufen werden:
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();
}
Bildrahmenformatierung
Aspose.Slides bietet zahlreiche Formatierungsoptionen, die auf einen Bildrahmen angewendet werden können. Mit diesen Optionen können Sie einen Bildrahmen so anpassen, dass er bestimmten Anforderungen entspricht.
- Erstellen Sie eine Instanz der Klasse Presentation.
- Holen Sie sich die Referenz einer Folie über ihren Index.
- Erstellen Sie ein IPPImage‑Objekt, indem Sie ein Bild zur IImagescollection hinzufügen, die dem Präsentationsobjekt zugeordnet ist und zum Füllen der Form verwendet wird.
- Geben Sie die Breite und Höhe des Bildes an.
- Erstellen Sie ein
PictureFramebasierend auf der Breite und Höhe des Bildes über die Methode AddPictureFrame des IShapes-Objekts, das der referenzierten Folie zugeordnet ist. - Fügen Sie der Folie den Bildrahmen (der das Bild enthält) hinzu.
- Legen Sie die Linienfarbe des Bildrahmens fest.
- Legen Sie die Linienbreite des Bildrahmens fest.
- 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.
- Fügen Sie der Folie den Bildrahmen (der das Bild enthält) hinzu.
- Schreiben Sie die geänderte Präsentation als PPTX‑Datei.
Dieser Java‑Code demonstriert den Bildrahmen‑Formatierungsprozess:
// 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();
}
Tip
Aspose hat kürzlich einen kostenlosen Collage Maker entwickelt. Wenn Sie jemals JPG/JPEG oder PNG‑Bilder zusammenführen oder Raster aus Fotos erstellen müssen, können Sie diesen Service nutzen.Bild als Link hinzufügen
Um große Präsentationsgrößen zu vermeiden, können Sie Bilder (oder Videos) über Links hinzufügen, anstatt die Dateien direkt in die Präsentation einzubetten. Dieser Java‑Code zeigt, wie ein Bild und ein Video in einen Platzhalter eingefügt werden:
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 ein vorhandenes Bild auf einer Folie zugeschnitten wird:
Presentation pres = new Presentation();
// Erstellt 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 Bildrahmen hinzu
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Beschneidet das Bild (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 löschen wollen, können Sie die Methode deletePictureCroppedAreas() verwenden. Diese Methode gibt das zugeschnittene Bild zurück oder das Originalbild, falls kein Zuschnitt erforderlich ist.
Dieser Java‑Code demonstriert die Vorgehensweise:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Ruft den Bildrahmen von der ersten Folie ab
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Löscht beschnittene Bereiche des Bildes im Bildrahmen 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();
}
NOTE
Die Methode deletePictureCroppedAreas() fügt das zugeschnittene Bild der Bildsammlung der Präsentation hinzu. Wenn das Bild nur im verarbeiteten PictureFrame verwendet wird, kann diese Einrichtung die Präsentationsgröße reduzieren. Andernfalls erhöht sich die Anzahl der Bilder in der resultierenden Präsentation.
Diese Methode konvertiert WMF/EMF‑Metadateien während des Zuschneidens in Raster‑PNG‑Bilder.
Bilder komprimieren
Sie können ein Bild in einer Präsentation mithilfe der Methode IPictureFillFormat.compressImage komprimieren. Diese Methode komprimiert ein Bild, indem sie die Größe basierend auf der Formgröße und der angegebenen Auflösung reduziert, mit der Option, zugeschnittene Bereiche zu löschen.
Sie passt die Bildgröße und Auflösung ähnlich der PowerPoint‑Funktion Picture Format > Compress Pictures > Resolution an.
Die folgenden Java‑Beispiele demonstrieren, wie ein Bild in einer Präsentation komprimiert wird, indem eine Zielauflösung angegeben und optional zugeschnittene Bereiche entfernt werden:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimiert das Bild mit einer Zielauflösung von 150 DPI (Web-Auflösung) und entfernt beschnittene Bereiche.
boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
// Überprüft das Ergebnis der Komprimierung.
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();
}
Oder mit einem benutzerdefinierten DPI‑Wert direkt:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimiert das Bild auf 150 DPI (Web-Auflösung) und entfernt beschnittene Bereiche.
pictureFrame.getPictureFormat().compressImage(true, 150f);
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
NOTE
Die Methode konvertiert das Bild zu einer niedrigeren Auflösung basierend auf der Formgröße und dem angegebenen DPI. Zugeschnittene Bereiche können ebenfalls gelöscht werden, um die Dateigröße zu optimieren.Wenn das Bild ein Metafile (WMF/EMF) oder SVG ist, wird keine Komprimierung angewendet. Außerdem wird die JPEG‑Qualität je nach Auflösung erhalten oder leicht reduziert, ähnlich wie PowerPoint hochauflösende JPEGs behandelt.
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 das Seitenverhältnis einer Form gesperrt wird:
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();
}
NOTE
Diese Lock Aspect Ratio-Einstellung bewahrt nur das Seitenverhältnis der Form, nicht jedoch das des darin enthaltenen Bildes.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 angeben.
Wenn ein Bild gestreckt wird, wird ein Quellrechteck so skaliert, dass es in das angegebene Füllrechteck passt. Jede Kante des Füllrechtecks wird durch einen prozentualen Versatz von der entsprechenden Kante der Begrenzungsbox der Form definiert. Ein positiver Prozentsatz gibt einen Einschub an, ein negativer Prozentsatz einen Überstand.
- Erstellen Sie eine Instanz der Presentation-Klasse.
- Holen Sie sich die Referenz einer Folie über ihren Index.
- Fügen Sie ein Rechteck
AutoShapehinzu. - Erstellen Sie ein Bild.
- Legen Sie den Fülltyp der Form fest.
- Legen Sie den Bildfüllmodus der Form fest.
- Fügen Sie ein Bild hinzu, um die Form zu füllen.
- Geben Sie Bildversätze vom entsprechenden Rand der Formbegrenzungsbox an.
- Schreiben Sie die geänderte 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 eine AutoShape vom Typ Rectangle hinzu
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Setzt den Fülltyp der Form
aShape.getFillFormat().setFillType(FillType.Picture);
// Setzt den Bildfüllmodus der Form
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 vom jeweiligen Rand 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 kann ich herausfinden, 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 ist. Die Liste der unterstützten Formate überschneidet sich im Allgemeinen mit den Fähigkeiten der Folien‑ und Bildkonvertierungs‑Engine.
Wie wirkt sich das Hinzufügen von Dutzenden großer Bilder auf die PPTX‑Größe und Leistung aus?
Das Einbetten großer Bilder erhöht Dateigröße und Speicherverbrauch; das Verlinken von Bildern hilft, die Präsentationsgröße klein zu halten, erfordert jedoch, dass die externen Dateien weiterhin verfügbar sind. 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 sperren?
Verwenden Sie shape locks für einen PictureFrame (z. B. zum Deaktivieren von Verschieben oder Größenauswahl). Der Sperrmechanismus wird für verschiedene Formtypen unterstützt, einschließlich PictureFrame.
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 Exportieren nach PDF oder zu Rasterformaten kann das Ergebnis je nach Exporteinstellungen rasterisiert werden; die Tatsache, dass das ursprüngliche SVG als Vektor gespeichert ist, wird durch das Extraktionsverhalten bestätigt.