Gérer les cadres d'image dans les présentations en .NET
Introduction
Un cadre d’image est une forme qui contient une image — c’est comme une image dans un cadre.
Vous pouvez ajouter une image à une diapositive via un cadre d’image. Ainsi, vous pouvez mettre en forme l’image en formatant le cadre d’image.
Astuce
Aspose propose des convertisseurs gratuits — JPEG to PowerPoint et PNG to PowerPoint — qui permettent de créer rapidement des présentations à partir d’images.Créer un cadre d’image
- Créez une instance de la classe Presentation.
- Obtenez la référence d’une diapositive via son index.
- Créez un objet IPPImage en ajoutant une image à la IImagescollection associée à l’objet présentation qui sera utilisé pour remplir la forme.
- Spécifiez la largeur et la hauteur de l’image.
- Créez un PictureFrame basé sur la largeur et la hauteur de l’image via la méthode
AddPictureFrameexposée par l’objet forme associé à la diapositive référencée. - Ajoutez un cadre d’image (contenant l’image) à la diapositive.
- Enregistrez la présentation modifiée sous forme de fichier PPTX.
Ce code C# montre comment créer un cadre d’image :
// Instancie la classe Presentation qui représente un fichier PPTX
using (Presentation pres = new Presentation())
{
// Obtient la première diapositive
ISlide slide = pres.Slides[0];
// Charge une image et l'ajoute à la collection d'images de la présentation
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Ajoute un cadre d'image avec la même hauteur et largeur
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Applique un certain formatage au cadre d'image
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Enregistre la présentation dans un fichier PPTX
pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Créer un cadre d’image avec échelle relative
En modifiant l’échelle relative d’une image, vous pouvez créer un cadre d’image plus complexe.
- Créez une instance de la classe Presentation.
- Obtenez la référence d’une diapositive via son index.
- Ajoutez une image à la collection d’images de la présentation.
- Créez un objet IPPImage en ajoutant une image à la IImagescollection associée à l’objet présentation qui sera utilisé pour remplir la forme.
- Spécifiez la largeur et la hauteur relatives de l’image dans le cadre d’image.
- Enregistrez la présentation modifiée sous forme de fichier PPTX.
Ce code C# montre comment créer un cadre d’image avec échelle relative :
// Instancie la classe Presentation qui représente un fichier PPTX
using (Presentation presentation = new Presentation())
{
// Charge une image et l'ajoute à la collection d'images de la présentation
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Ajoute un cadre d'image à la diapositive
IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Définit la largeur et la hauteur d'échelle relative
pictureFrame.RelativeScaleHeight = 0.8f;
pictureFrame.RelativeScaleWidth = 1.35f;
// Enregistre la présentation
presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}
Extraire les images raster des cadres d’image
Vous pouvez extraire des images raster des objets PictureFrame et les enregistrer au format PNG, JPG et autres. L’exemple de code ci-dessous montre comment extraire une image du document “sample.pptx” et l’enregistrer au format PNG.
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);
}
}
Extraire les images SVG des cadres d’image
Lorsqu’une présentation contient des graphiques SVG placés à l’intérieur de formes PictureFrame, Aspose.Slides pour .NET vous permet de récupérer les images vectorielles originales avec une fidélité totale. En parcourant la collection de formes de la diapositive, vous pouvez identifier chaque PictureFrame, vérifier si le IPPImage sous-jacent contient du contenu SVG, puis enregistrer cette image sur le disque ou dans un flux dans son format SVG natif.
L’exemple de code suivant montre comment extraire une image SVG d’un cadre d’image :
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);
}
}
Obtenir la transparence d’une image
Aspose.Slides vous permet d’obtenir l’effet de transparence appliqué à une image. Ce code C# démontre l’opération :
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);
}
}
}
Obtenir la luminosité et le contraste d’une image
Aspose.Slides vous permet d’obtenir l’effet de luminosité et de contraste appliqué à une image. L’interface ILuminance représente cet effet de transformation d’image.
Ce code C# montre comment obtenir les réglages de luminosité et de contraste d’un cadre d’image :
using (var presentation = new Presentation("sample.pptx"))
{
var slide = presentation.Slides[0];
var shape = slide.Shapes[0];
var pictureFrame = (IPictureFrame)shape;
var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
foreach (var effect in imageTransform)
{
if (effect is ILuminance luminanceEffect)
{
var luminance = luminanceEffect.GetEffective();
var brightness = luminance.Brightness;
var contrast = luminance.Contrast;
Console.WriteLine("Brightness: " + brightness);
Console.WriteLine("Contrast: " + contrast);
}
}
}
Mise en forme du cadre d’image
Aspose.Slides propose de nombreuses options de mise en forme pouvant être appliquées à un cadre d’image. En utilisant ces options, vous pouvez modifier un cadre d’image pour qu’il réponde à des exigences spécifiques.
- Créez une instance de la classe Presentation .
- Obtenez la référence d’une diapositive via son index.
- Créez un objet IPPImage en ajoutant une image à la IImagescollection associée à l’objet présentation qui sera utilisé pour remplir la forme.
- Spécifiez la largeur et la hauteur de l’image.
- Créez un
PictureFramebasé sur la largeur et la hauteur de l’image via la méthode AddPictureFrame exposée par l’objet IShapes associé à la diapositive référencée. - Ajoutez le cadre d’image (contenant l’image) à la diapositive.
- Définissez la couleur de la bordure du cadre d’image.
- Définissez la largeur de la bordure du cadre d’image.
- Faites pivoter le cadre d’image en lui attribuant une valeur positive ou négative.
- Une valeur positive fait pivoter l’image dans le sens des aiguilles d’une montre.
- Une valeur négative fait pivoter l’image dans le sens inverse des aiguilles d’une montre.
- Ajoutez le cadre d’image (contenant l’image) à la diapositive.
- Enregistrez la présentation modifiée sous forme de fichier PPTX.
Ce code C# montre le processus de mise en forme du cadre d’image :
// Instancie la classe Presentation qui représente un fichier PPTX
using (Presentation presentation = new Presentation())
{
// Obtient la première diapositive
ISlide slide = presentation.Slides[0];
// Charge une image et l'ajoute à la collection d'images de la présentation
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Ajoute un cadre d'image avec la hauteur et la largeur équivalentes de l'image
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Applique un certain formatage au cadre d'image
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Enregistre la présentation dans un fichier PPTX
presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Ajouter une image sous forme de lien
Pour éviter que les présentations deviennent volumineuses, vous pouvez ajouter des images (ou des vidéos) via des liens au lieu d’intégrer les fichiers directement dans les présentations. Ce code C# montre comment ajouter une image et une vidéo dans un espace réservé :
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);
}
Rogner des images
Ce code C# montre comment rogner une image existante sur une diapositive :
using (Presentation presentation = new Presentation())
{
// Crée un nouvel objet image
IImage image = Images.FromFile(imagePath);
IPPImage newImage = presentation.Images.AddImage(image);
image.Dispose();
// Ajoute un PictureFrame à une diapositive
IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, newImage);
// Recadre l'image (valeurs en pourcentage)
picFrame.PictureFormat.CropLeft = 23.6f;
picFrame.PictureFormat.CropRight = 21.5f;
picFrame.PictureFormat.CropTop = 3;
picFrame.PictureFormat.CropBottom = 31;
// Enregistre le résultat
presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}
Supprimer les zones rognées d’un cadre d’image
Si vous souhaitez supprimer les zones rognées d’une image contenue dans un cadre, vous pouvez utiliser la méthode IPictureFillFormat.DeletePictureCroppedAreas . Cette méthode renvoie l’image rognée ou l’image d’origine si le rognage n’est pas nécessaire.
Ce code C# montre l’opération :
using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
ISlide slide = presentation.Slides[0];
// Obtient le PictureFrame de la première diapositive
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Supprime les zones rognées de l'image du PictureFrame et renvoie l'image rognée
IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();
// Enregistre le résultat
presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}
NOTE
La méthode IPictureFillFormat.DeletePictureCroppedAreas ajoute l’image rognée à la collection d’images de la présentation. Si l’image n’est utilisée que dans le PictureFrame traité, cette configuration peut réduire la taille de la présentation. Sinon, le nombre d’images dans la présentation résultante augmentera.
Cette méthode convertit les fichiers métas WMF/EMF en images PNG raster lors de l’opération de rognage.
Compresser des images
Vous pouvez compresser une image dans une présentation à l’aide de la méthode IPictureFillFormat.CompressImage . Cette méthode compresse une image en réduisant sa taille en fonction de la taille de la forme et de la résolution spécifiée, avec la possibilité de supprimer les zones rognées.
Elle ajuste la taille et la résolution de l’image de façon similaire à la fonctionnalité Picture Format → Compress Pictures → Resolution de PowerPoint.
Les exemples C# suivants montrent comment compresser une image dans une présentation en spécifiant une résolution cible et en supprimant éventuellement les zones rognées :
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Compresse l'image avec une résolution cible de 150 DPI (résolution Web) et supprime les zones rognées.
bool result = pictureFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);
// Vérifie le résultat de la compression.
if (result)
{
Console.WriteLine("Image successfully compressed.");
}
else
{
Console.WriteLine("Image compression failed or no changes were necessary.");
}
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
Ou en utilisant directement une valeur DPI personnalisée :
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Compresse l'image à 150 DPI (résolution Web), en supprimant les zones rognées.
pictureFrame.PictureFormat.CompressImage(true, 150f);
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
NOTE
La méthode convertit l’image à une résolution inférieure en fonction de la taille de la forme et du DPI fourni. Les régions rognées peuvent également être supprimées pour optimiser la taille du fichier. Si l’image est un métafichier (WMF/EMF) ou un SVG, la compression ne sera pas appliquée. De plus, la qualité JPEG est préservée ou légèrement réduite selon la résolution, de façon similaire à la gestion des JPEG haute résolution par PowerPoint.Verrouiller le ratio d’aspect
Si vous souhaitez qu’une forme contenant une image conserve son ratio d’aspect même après modification des dimensions de l’image, vous pouvez utiliser la propriété IPictureFrameLock.AspectRatioLocked pour définir le paramètre Lock Aspect Ratio.
Ce code C# montre comment verrouiller le ratio d’aspect d’une forme :
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);
// Définit la forme pour conserver le ratio d'aspect lors du redimensionnement
pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}
NOTE
Ce réglage Lock Aspect Ratio préserve uniquement le ratio d’aspect de la forme et non celui de l’image qu’elle contient.Utiliser la propriété StretchOff
En utilisant les propriétés StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight et StretchOffsetBottom de l’interface IPictureFillFormat et de la classe PictureFillFormat, vous pouvez spécifier un rectangle de remplissage.
Lorsque l’étirement est spécifié pour une image, un rectangle source est redimensionné pour s’adapter au rectangle de remplissage spécifié. Chaque bord du rectangle de remplissage est défini par un décalage en pourcentage par rapport au bord correspondant de la boîte englobante de la forme. Un pourcentage positif indique un retrait, tandis qu’un pourcentage négatif indique un dépassement.
- Créez une instance de la Presentation classe.
- Obtenez la référence d’une diapositive via son index.
- Ajoutez un rectangle
AutoShape. - Créez une image.
- Définissez le type de remplissage de la forme.
- Définissez le mode de remplissage d’image de la forme.
- Ajoutez une image définie pour remplir la forme.
- Spécifiez les décalages de l’image depuis le bord correspondant de la boîte englobante de la forme
- Enregistrez la présentation modifiée sous forme de fichier PPTX.
Ce code C# montre un processus dans lequel une propriété StretchOff est utilisée :
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);
// Définit l'image étirée depuis chaque côté dans le corps de la forme
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
Comment savoir quels formats d’image sont pris en charge pour PictureFrame ?
Aspose.Slides prend en charge à la fois les images raster (PNG, JPEG, BMP, GIF, etc.) et les images vectorielles (par exemple, SVG) via l’objet image assigné à un PictureFrame. La liste des formats pris en charge chevauche généralement les capacités du moteur de conversion de diapositives et d’images.
Comment l’ajout de dizaines d’images volumineuses affecte-t-il la taille et les performances du PPTX ?
L’intégration d’images volumineuses augmente la taille du fichier et l’utilisation de la mémoire ; le lien vers des images contribue à réduire la taille de la présentation mais nécessite que les fichiers externes restent accessibles. Aspose.Slides offre la possibilité d’ajouter des images par lien pour diminuer la taille du fichier.
Comment puis‑je verrouiller un objet image pour éviter un déplacement/redimensionnement accidentel ?
Utilisez les verrous de forme pour un PictureFrame (par exemple, désactiver le déplacement ou le redimensionnement). Le mécanisme de verrouillage est décrit pour les formes dans un article de protection séparé et est pris en charge pour divers types de formes, y compris PictureFrame.
La fidélité vectorielle SVG est‑elle préservée lors de l’exportation d’une présentation vers PDF/images ?
Aspose.Slides permet d’extraire un SVG d’un PictureFrame en tant que vecteur original. Lors de l'exportation vers PDF ou vers des formats raster, le résultat peut être rasterisé selon les paramètres d’exportation ; le fait que le SVG original soit stocké en tant que vecteur est confirmé par le comportement d’extraction.