Gérer les cadres d'image dans les présentations sur Android
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 formater l’image en formatant le cadre d’image.
Tip
Aspose propose des convertisseurs gratuits—JPEG en PowerPoint et PNG en 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 en tant que fichier PPTX.
Ce code Java montre comment créer un cadre d’image :
// Instancie la classe Presentation qui représente un fichier PPTX
Presentation pres = new Presentation();
try {
// Obtient la première diapositive
ISlide sld = pres.getSlides().get_Item(0);
// Instancie la classe Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Ajoute un cadre d'image avec la même hauteur et largeur que l'image
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Enregistre le fichier PPTX sur le disque
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Créer un cadre d’image avec mise à l’échelle relative
- 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 en tant que fichier PPTX.
Ce code Java montre comment créer un cadre d’image avec mise à l’échelle relative :
// Instancie la classe Presentation qui représente le PPTX
Presentation pres = new Presentation();
try {
// Obtient la première diapositive
ISlide sld = pres.getSlides().get_Item(0);
// Instancie la classe Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Ajoute un cadre d'image avec la même hauteur et largeur que l'image
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Définit l'échelle relative en hauteur et largeur
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// Enregistre le fichier PPTX sur le disque
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Extraire des images raster à partir de cadres d’image
Vous pouvez extraire des images raster des objets PictureFrame et les enregistrer au format PNG, JPG et autres formats. L’exemple de code ci-dessous montre comment extraire une image du document “sample.pptx” et l’enregistrer au format PNG.
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();
}
Extraire des images SVG à partir de cadres d’image
Lorsqu’une présentation contient des graphiques SVG placés à l’intérieur de formes PictureFrame, Aspose.Slides pour Android via Java 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 disque ou dans un flux au format SVG natif.
L’exemple de code suivant montre comment extraire une image SVG d’un cadre d’image :
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();
}
Obtenir la transparence d’une image
Aspose.Slides vous permet d’obtenir l’effet de transparence appliqué à une image. Ce code Java montre l’opération :
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);
}
}
Mise en forme du cadre d’image
Aspose.Slides propose de nombreuses options de mise en forme qui peuvent être appliquées à un cadre d’image. En utilisant ces options, vous pouvez modifier un cadre d’image pour répondre à 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 ligne du cadre d’image.
- Définissez la largeur de ligne 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 horaire.
- Une valeur négative fait pivoter l’image dans le sens antihoraire.
- Ajoutez le cadre d’image (contenant l’image) à la diapositive.
- Enregistrez la présentation modifiée en tant que fichier PPTX.
Ce code Java démontre le processus de mise en forme du cadre d’image :
// Instancie la classe Presentation qui représente le PPTX
Presentation pres = new Presentation();
try {
// Obtient la première diapositive
ISlide sld = pres.getSlides().get_Item(0);
// Instancie la classe Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Ajoute un cadre d'image avec la même hauteur et largeur que l'image
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Applique un certain formatage au PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Enregistre le fichier PPTX sur le disque
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tip
Aspose a récemment développé un outil gratuit de collage. Si vous avez besoin de fusionner des images JPG/JPEG ou PNG, ou de créer des grilles à partir de photos, vous pouvez utiliser ce service.Ajouter une image sous forme de lien
Pour éviter des tailles de présentation importantes, vous pouvez ajouter des images (ou vidéos) via des liens au lieu d’insérer les fichiers directement dans les présentations. Ce code Java montre comment ajouter une image et une vidéo dans un espace réservé :
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();
}
Rogner des images
Ce code Java montre comment rogner une image existante sur une diapositive :
Presentation pres = new Presentation();
// Crée un nouvel objet image
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Ajoute un PictureFrame à une diapositive
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Recadre l'image (valeurs en pourcentage)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Enregistre le résultat
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Supprimer les zones recadrées d’un cadre d’image
Si vous souhaitez supprimer les zones recadrées d’une image contenue dans un cadre, vous pouvez utiliser la méthode deletePictureCroppedAreas() . Cette méthode renvoie l’image recadrée ou l’image d’origine si le recadrage n’est pas nécessaire.
Ce code Java montre l’opération :
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Obtient le PictureFrame de la première diapositive
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Supprime les zones recadrées de l'image du PictureFrame et renvoie l'image recadrée
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Enregistre le résultat
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
NOTE
La méthode deletePictureCroppedAreas() ajoute l’image recadré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 métafichiers WMF/EMF en image PNG raster lors de l’opération de recadrage.
Verrouiller le ratio d’aspect
Si vous voulez 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 méthode setAspectRatioLocked pour activer le paramètre Lock Aspect Ratio.
Ce code Java montre comment verrouiller le ratio d’aspect d’une forme :
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);
// définir la forme pour préserver le ratio d'aspect lors du redimensionnement
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
NOTE
Ce paramètre Lock Aspect Ratio ne préserve que 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 mis à l’échelle pour s’ajuster au rectangle de remplissage indiqué. 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, un pourcentage négatif 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 en tant que fichier PPTX.
Ce code Java montre un processus utilisant la propriété StretchOff :
// Instancie la classe Presentation qui représente un fichier PPTX
Presentation pres = new Presentation();
try {
// Obtient la première diapositive
ISlide slide = pres.getSlides().get_Item(0);
// Instancie la classe ImageEx
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Ajoute un AutoShape de type Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Définit le type de remplissage de la forme
aShape.getFillFormat().setFillType(FillType.Picture);
// Définit le mode de remplissage image de la forme
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Définit l'image pour remplir la forme
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Spécifie les décalages de l'image depuis le bord correspondant de la boîte englobante de la forme
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
// Enregistre le fichier PPTX sur le disque
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Comment savoir quels formats d’image sont pris en charge pour PictureFrame ?
Aspose.Slides prend en charge les images raster (PNG, JPEG, BMP, GIF, etc.) ainsi que les images vectorielles (par exemple SVG) via l’objet image attribué à un PictureFrame. La liste des formats supportés recouvre 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’insertion d’images volumineuses augmente la taille du fichier et la consommation mémoire ; le lien d’images réduit la taille de la présentation mais nécessite que les fichiers externes restent accessibles. Aspose.Slides permet d’ajouter des images par lien afin de diminuer la taille du fichier.
Comment 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 séparé sur la protection et est pris en charge pour divers types de formes, y compris les PictureFrame.
La fidélité du vecteur 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 des formats raster, le résultat peut être rasterisé selon les paramètres d’exportation ; le fait que le SVG d’origine soit stocké comme vecteur est confirmé par le comportement d’extraction.