Trabajando con imágenes en presentaciones — Aspose.Slides FOSS para Java
Aspose.Slides FOSS for Java lets you embed images in a presentation’s shared image collection and display them on slides using PictureFrame formas. Las imágenes también pueden usarse como rellenos de fondo de forma mediante FillType.PICTURE.
Añadiendo una imagen desde archivo
Cargue los bytes de la imagen desde el disco y añádalos a la colección de imágenes de la presentación con prs.getImages().addImage(). Luego coloque la imagen en una diapositiva como una PictureFrame:
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Path;
try (Presentation prs = new Presentation()) {
// Add the image to the shared collection
byte[] imageData = Files.readAllBytes(Path.of("logo.png"));
var img = prs.getImages().addImage(imageData);
// Place it on the slide as a PictureFrame
var slide = prs.getSlides().get(0);
slide.getShapes().addPictureFrame(ShapeType.RECTANGLE, 50, 50, 300, 200, img);
prs.save("with-image.pptx", SaveFormat.PPTX);
}Los cuatro argumentos posicionales de addPictureFrame() son: x, y, width, height en puntos.
Añadiendo una imagen desde bytes
Si ya tiene los bytes de la imagen (p. ej., descargados de una URL o leídos de una base de datos), páselos directamente a addImage():
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Path;
// Simulate having bytes in memory
byte[] imageBytes = Files.readAllBytes(Path.of("photo.jpg"));
try (Presentation prs = new Presentation()) {
var img = prs.getImages().addImage(imageBytes);
prs.getSlides().get(0).getShapes().addPictureFrame(ShapeType.RECTANGLE, 100, 80, 400, 250, img);
prs.save("from-bytes.pptx", SaveFormat.PPTX);
}Posicionando y dimensionando un PictureFrame
El PictureFrame devuelto por addPictureFrame() hereda todos los Shape propiedades de geometría y puede ser reposicionado después de la creación:
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Path;
try (Presentation prs = new Presentation()) {
byte[] imageData = Files.readAllBytes(Path.of("photo.jpg"));
var img = prs.getImages().addImage(imageData);
var pf = prs.getSlides().get(0).getShapes().addPictureFrame(ShapeType.RECTANGLE, 0, 0, 100, 100, img);
// Reposition and resize after creation
pf.setX(50);
pf.setY(100);
pf.setWidth(350);
pf.setHeight(250);
prs.save("positioned.pptx", SaveFormat.PPTX);
}Usando una imagen como relleno de forma
Cualquier forma (no solo PictureFrame) puede usar una imagen como relleno de fondo. Establezca FillType.PICTURE y asigne la imagen a getPictureFillFormat().getPicture().setImage():
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.PictureFillMode;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Path;
try (Presentation prs = new Presentation()) {
byte[] imageData = Files.readAllBytes(Path.of("background.png"));
var img = prs.getImages().addImage(imageData);
var slide = prs.getSlides().get(0);
var shape = slide.getShapes().addAutoShape(ShapeType.ROUND_CORNER_RECTANGLE, 50, 50, 400, 250);
shape.getFillFormat().setFillType(FillType.PICTURE);
shape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.STRETCH);
shape.getFillFormat().getPictureFillFormat().getPicture().setImage(img);
prs.save("picture-fill.pptx", SaveFormat.PPTX);
}PictureFillMode.STRETCH escala la imagen para llenar toda la forma. Utilice TILE para patrones repetitivos.
Añadiendo múltiples imágenes a través de diapositivas
Imágenes añadidas a prs.getImages() se comparten en todas las diapositivas. El mismo IPPImage objeto puede usarse en varias diapositivas sin duplicar los datos:
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Path;
try (Presentation prs = new Presentation()) {
byte[] logoData = Files.readAllBytes(Path.of("logo.png"));
var logo = prs.getImages().addImage(logoData);
// Add the same image to the first slide
prs.getSlides().get(0).getShapes().addPictureFrame(ShapeType.RECTANGLE, 600, 10, 100, 40, logo);
prs.save("shared-image.pptx", SaveFormat.PPTX);
}