Verwalten von Bildrahmen in Präsentationen in .NET
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 bietet kostenlose Konverter —JPEG zu PowerPoint und PNG zu PowerPoint — die es ermöglichen, schnell Präsentationen aus Bildern zu erstellen.Bildrahmen erstellen
- Erstellen Sie eine Instanz der Presentation-Klasse.
- Holen Sie sich über den Index die Referenz einer Folie.
- 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 Formobjekt bereitgestellt wird, das der referenzierten Folie zugeordnet ist. - Fügen Sie der Folie einen Bildrahmen (der das Bild enthält) hinzu.
- Speichern Sie die geänderte Präsentation als PPTX-Datei.
Dieser C#‑Code zeigt, wie ein Bildrahmen erstellt wird:
// Instanziiert die Presentation-Klasse, die eine PPTX-Datei repräsentiert
using (Presentation pres = new Presentation())
{
// Holt die erste Folie
ISlide slide = pres.Slides[0];
// Lädt ein Bild und fügt es der Bildsammlung der Präsentation hinzu
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Fügt einen Bildrahmen mit gleicher Höhe und Breite hinzu
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Wendet einige Formatierungen auf den Bildrahmen an
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Schreibt die Präsentation in eine PPTX-Datei
pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Bildrahmen mit relativer Skalierung erstellen
Durch Ändern der relativen Skalierung eines Bildes können Sie einen komplexeren Bildrahmen erstellen.
- Erstellen Sie eine Instanz der Presentation-Klasse.
- Holen Sie sich über den Index die Referenz einer Folie.
- 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.
- Speichern Sie die geänderte Präsentation als PPTX-Datei.
Das folgende C#‑Codebeispiel zeigt, wie ein Bildrahmen mit relativer Skalierung erstellt wird:
// Instanziert die Presentation-Klasse, die eine PPTX-Datei darstellt
using (Presentation presentation = new Presentation())
{
// Lädt ein Bild und fügt es der Bildsammlung der Präsentation hinzu
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Fügt einen Bildrahmen zur Folie hinzu
IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Setzt die relative Skalierung für Breite und Höhe
pictureFrame.RelativeScaleHeight = 0.8f;
pictureFrame.RelativeScaleWidth = 1.35f;
// Speichert die Präsentation
presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}
Rasterbilder aus Bildrahmen extrahieren
Sie können Rasterbilder aus PictureFrame-Objekten extrahieren und sie in PNG, JPG und anderen Formaten speichern. Das untenstehende Codebeispiel zeigt, wie ein Bild aus dem Dokument “sample.pptx” extrahiert und im PNG‑Format gespeichert wird.
using (var presentation = new Presentation("sample.pptx"))
{
var firstSlide = presentation.Slides[0];
var firstShape = firstSlide.Shapes[0];
if (firstShape is IPictureFrame pictureFrame)
{
var image = pictureFrame.PictureFormat.Picture.Image.SystemImage;
image.Save("slide_1_shape_1.png", ImageFormat.Png);
}
}
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 .NET das Abrufen der ursprünglichen Vektorbilder mit voller Treue. Durch 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 im nativen SVG‑Format auf Festplatte oder in einen Stream speichern.
Das folgende Codebeispiel demonstriert, wie ein SVG‑Bild aus einem Bildrahmen extrahiert wird:
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var shape = slide.Shapes[0];
if (shape is IPictureFrame pictureFrame)
{
var svgImage = pictureFrame.PictureFormat.Picture.Image.SvgImage;
if (svgImage != null)
{
File.WriteAllText("output.svg", svgImage.SvgContent);
}
}
Transparenz eines Bildes ermitteln
Aspose.Slides ermöglicht das Abrufen des auf ein Bild angewendeten Transparenzeffekts. Dieser C#‑Code demonstriert den Vorgang:
using (var presentation = new Presentation("Test.pptx"))
{
var pictureFrame = (IPictureFrame)presentation.Slides[0].Shapes[0];
var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
foreach (var effect in imageTransform)
{
if (effect is IAlphaModulateFixed alphaModulateFixed)
{
var transparencyValue = 100 - alphaModulateFixed.Amount;
Console.WriteLine("Picture transparency: " + transparencyValue);
}
}
}
Bildrahmen formatieren
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 bestimmte Anforderungen erfüllt.
- Erstellen Sie eine Instanz der Presentation-Klasse.
- Holen Sie sich über den Index die Referenz einer Folie.
- 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, die vom IShapes-Objekt bereitgestellt wird, 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 Linienstärke 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) erneut hinzu.
- Speichern Sie die geänderte Präsentation als PPTX-Datei.
Dieser C#‑Code demonstriert den Bildrahmen‑Formatierungsprozess:
// Instanziert die Presentation-Klasse, die eine PPTX-Datei darstellt
using (Presentation presentation = new Presentation())
{
// Holt die erste Folie
ISlide slide = presentation.Slides[0];
// Lädt ein Bild und fügt es der Bildsammlung der Präsentation hinzu
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Fügt einen Bildrahmen mit derselben Höhe und Breite wie das Bild hinzu
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Wendet einige Formatierungen auf den Bildrahmen an
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Speichert die Präsentation in einer PPTX-Datei
presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Ein Bild als Link einfü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 C#‑Code zeigt, wie Sie ein Bild und ein Video in einen Platzhalter einfügen:
using (var presentation = new Presentation("input.pptx"))
{
var shapesToRemove = new List<IShape>();
int shapesCount = presentation.Slides[0].Shapes.Count;
for (var i = 0; i < shapesCount; i++)
{
var autoShape = presentation.Slides[0].Shapes[i];
if (autoShape.Placeholder == null)
{
continue;
}
switch (autoShape.Placeholder.Type)
{
case PlaceholderType.Picture:
var pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle,
autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, null);
pictureFrame.PictureFormat.Picture.LinkPathLong =
"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:
var videoFrame = presentation.Slides[0].Shapes.AddVideoFrame(
autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, "");
videoFrame.PictureFormat.Picture.LinkPathLong =
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg";
videoFrame.LinkPathLong = "https://youtu.be/t_1LYZ102RA";
shapesToRemove.Add(autoShape);
break;
}
}
foreach (var shape in shapesToRemove)
{
presentation.Slides[0].Shapes.Remove(shape);
}
presentation.Save("output.pptx", SaveFormat.Pptx);
}
Bilder zuschneiden
Dieser C#‑Code zeigt, wie Sie ein vorhandenes Bild auf einer Folie zuschneiden:
using (Presentation presentation = new Presentation())
{
// Erstellt ein neues Bildobjekt
IImage image = Images.FromFile(imagePath);
IPPImage newImage = presentation.Images.AddImage(image);
image.Dispose();
// Fügt einer Folie einen Bildrahmen hinzu
IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, newImage);
// Schneidet das Bild zu (Prozentwerte)
picFrame.PictureFormat.CropLeft = 23.6f;
picFrame.PictureFormat.CropRight = 21.5f;
picFrame.PictureFormat.CropTop = 3;
picFrame.PictureFormat.CropBottom = 31;
// Speichert das Ergebnis
presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}
Beschnittene Bereiche eines Bildes löschen
Wenn Sie die beschnittenen Bereiche eines in einem Rahmen enthaltenen Bildes entfernen möchten, können Sie die Methode IPictureFillFormat.DeletePictureCroppedAreas verwenden. Diese Methode gibt das beschnittene Bild oder das Originalbild zurück, falls kein Zuschnitt erforderlich ist.
Dieser C#‑Code demonstriert den Vorgang:
using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
ISlide slide = presentation.Slides[0];
// Holt das PictureFrame von der ersten Folie
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Löscht zugeschnittene Bereiche des PictureFrame-Bildes und gibt das zugeschnittene Bild zurück
IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();
// Speichert das Ergebnis
presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}
NOTE
Die Methode IPictureFillFormat.DeletePictureCroppedAreas fügt das beschnittene Bild der Bildsammlung der Präsentation hinzu. Wenn das Bild nur im verarbeiteten PictureFrame verwendet wird, kann diese Einstellung die Präsentationsgröße reduzieren. Andernfalls erhöht sich die Anzahl der Bilder in der resultierenden Präsentation.
Diese Methode konvertiert WMF/EMF‑Metadateien bei der Zuschneideoperation in ein Raster‑PNG‑Bild.
Bilder komprimieren
Sie können ein Bild in einer Präsentation mit der Methode IPictureFillFormat.CompressImage komprimieren. Diese Methode komprimiert ein Bild, indem sie seine Größe basierend auf der Formgröße und der angegebenen Auflösung reduziert, mit der Option, beschnittene Bereiche zu löschen.
Sie passt Größe und Auflösung des Bildes ähnlich der PowerPoint‑Funktion Bildformat → Bilder komprimieren → Auflösung an.
Die folgenden C#‑Beispiele zeigen, wie ein Bild in einer Präsentation komprimiert wird, indem eine Zielauflösung angegeben und optional beschnittene Bereiche entfernt werden:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
// Holt das PictureFrame von der Folie
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Komprimiert das Bild mit einer Zielauflösung von 150 DPI (Web-Auflösung) und entfernt zugeschnittene Bereiche
bool result = picFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);
// Prüft das Ergebnis der Kompression
if (result)
{
Console.WriteLine("Image successfully compressed.");
}
else
{
Console.WriteLine("Image compression failed or no changes were necessary.");
}
}
Oder indem Sie direkt einen benutzerdefinierten DPI‑Wert verwenden:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Komprimiert das Bild auf 150 DPI (Web-Auflösung) und entfernt zugeschnittene Bereiche
bool result = picFrame.PictureFormat.CompressImage(true, 150f);
}
NOTE
Die Methode konvertiert das Bild bei der Komprimierung in eine niedrigere Auflösung basierend auf der Größe der Form und dem angegebenen DPI. Beschnittene Bereiche können ebenfalls gelöscht werden, um die Dateigröße zu optimieren. Wenn das Bild ein Metadateiformat (WMF/EMF) oder SVG ist, wird keine Komprimierung durchgeführt. Bei JPEG wird die Qualität je nach Auflösung beibehalten oder leicht reduziert, ähnlich wie PowerPoint bei hochauflösenden JPEGs.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 Eigenschaft IPictureFrameLock.AspectRatioLocked verwenden, um die Einstellung Seitenverhältnis sperren zu setzen.
Dieser C#‑Code zeigt, wie Sie das Seitenverhältnis einer Form sperren:
using (Presentation pres = new Presentation("pres.pptx"))
{
ILayoutSlide layout = pres.LayoutSlides.GetByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.Slides.AddEmptySlide(layout);
IImage image = Images.FromFile("image.png");
IPPImage presImage = pres.Images.AddImage(image);
image.Dispose();
IPictureFrame pictureFrame = emptySlide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, presImage.Width, presImage.Height, presImage);
// Setzt die Form so, dass das Seitenverhältnis beim Ändern der Größe erhalten bleibt
pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}
NOTE
Diese Einstellung Seitenverhältnis sperren bewahrt nur das Seitenverhältnis der Form, nicht jedoch das des enthaltenen Bildes.Die StretchOff‑Eigenschaft verwenden
Durch die Verwendung der Eigenschaften StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight und StretchOffsetBottom des IPictureFillFormat-Interfaces und der PictureFillFormat-Klasse können Sie ein Füllrechteck angeben.
Wenn für ein Bild ein Stretchen angegeben wird, 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 gibt einen Innenschnitt an, ein negativer Prozentsatz einen Außenschnitt.
- Erstellen Sie eine Instanz der Presentation‑Klasse.
- Holen Sie sich über den Index die Referenz einer Folie.
- 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 von der entsprechenden Kante der Begrenzungsbox der Form an.
- Speichern Sie die geänderte Präsentation als PPTX-Datei.
Dieser C#‑Code demonstriert einen Prozess, bei dem die StretchOff‑Eigenschaft verwendet wird:
using (Presentation pres = new Presentation())
{
IImage image = Images.FromFile("image.png");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
IPictureFrame pictureFrame = pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 400, 400, ppImage);
// Setzt das Bild von jeder Seite im Formkörper gedehnt
pictureFrame.PictureFormat.PictureFillMode = PictureFillMode.Stretch;
pictureFrame.PictureFormat.StretchOffsetLeft = 24;
pictureFrame.PictureFormat.StretchOffsetRight = 24;
pictureFrame.PictureFormat.StretchOffsetTop = 24;
pictureFrame.PictureFormat.StretchOffsetBottom = 24;
pres.Save("imageStretch.pptx", SaveFormat.Pptx);
}
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 wird. Die unterstützten Formate überschneiden sich im Allgemeinen mit den Fähigkeiten der Folien‑ und Bildkonvertierungs‑Engine.
Wie wirkt sich das Hinzufügen vieler großer Bilder auf die PPTX‑Größe und die Leistung aus?
Das Einbetten großer Bilder erhöht Dateigröße und Speicherverbrauch; das Verlinken von Bildern reduziert die Präsentationsgröße, erfordert jedoch, dass die externen Dateien weiterhin zugänglich sind. Aspose.Slides ermöglicht das Hinzufügen von Bildern per Link, 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 in einem separaten Schutz‑Artikel beschrieben und ist für verschiedene Formtypen, einschließlich PictureFrame, verfügbar.
Wird die Vektor‑Treue von SVG bei der Exportierung einer Präsentation zu PDF/Bildern erhalten?
Aspose.Slides ermöglicht das Extrahieren eines SVG aus einem PictureFrame als Originalvektor. Beim Exportieren zu PDF oder zu Rasterformaten kann das Ergebnis je nach Exporteinstellungen gerastert werden; das Original‑SVG bleibt jedoch als Vektor erhalten, wie das Extraktionsverhalten zeigt.