Hantera bildramar i presentationer på Android
Introduktion
En bildram är en form som innehåller en bild—det är som en bild i en ram.
Du kan lägga till en bild på en bildspel genom en bildram. På så sätt kan du formatera bilden genom att formatera bildramen.
Tips
Aspose tillhandahåller gratis konverterare—JPEG till PowerPoint och PNG till PowerPoint—som låter användare skapa presentationer snabbt från bilder.Skapa en bildram
- Skapa en instans av klassen Presentation.
- Hämta en bilds referens via dess index.
- Skapa ett IPPImage‑objekt genom att lägga till en bild i IImagescollection som är kopplad till presentationsobjektet och som kommer att användas för att fylla formen.
- Ange bildens bredd och höjd.
- Skapa en PictureFrame baserat på bildens bredd och höjd via
AddPictureFrame‑metoden som exponeras av formobjektet som är kopplat till den refererade bilden. - Lägg till en bildram (som innehåller bilden) på bilden.
- Spara den ändrade presentationen som en PPTX‑fil.
Denna Java‑kod visar hur du skapar en bildram:
// Skapar en instans av Presentation-klassen som representerar en PPTX-fil
Presentation pres = new Presentation();
try {
// Hämtar den första bilden
ISlide sld = pres.getSlides().get_Item(0);
// Skapar en instans av Image-klassen
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Lägger till en bildram med bildens motsvarande höjd och bredd
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Skriver PPTX-filen till disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Skapa en bildram med relativ skala
Genom att ändra en bilds relativa skalning kan du skapa en mer komplex bildram.
- Skapa en instans av klassen Presentation.
- Hämta en bilds referens via dess index.
- Lägg till en bild i presentationens bildsamling.
- Skapa ett IPPImage‑objekt genom att lägga till en bild i IImagescollection som är kopplad till presentationsobjektet och som kommer att användas för att fylla formen.
- Ange bildens relativa bredd och höjd i bildramen.
- Spara den ändrade presentationen som en PPTX‑fil.
Denna Java‑kod visar hur du skapar en bildram med relativ skala:
// Instansiera Presentation-klassen som representerar PPTX
Presentation pres = new Presentation();
try {
// Hämta den första bilden
ISlide sld = pres.getSlides().get_Item(0);
// Instansiera Image-klassen
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Lägg till bildram med bildens motsvarande höjd och bredd
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Ställer in relativ skala för bredd och höjd
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// Skriv PPTX-filen till disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Extrahera rasterbilder från bildramar
Du kan extrahera rasterbilder från PictureFrame‑objekt och spara dem i PNG, JPG och andra format. Kodexemplet nedan visar hur du extraherar en bild från dokumentet “sample.pptx” och sparar den i PNG‑format.
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();
}
Extrahera SVG‑bilder från bildramar
När en presentation innehåller SVG‑grafik placerad i PictureFrame‑former låter Aspose.Slides för Android via Java dig hämta de ursprungliga vektorbilderna med fullständig kvalitet. Genom att gå igenom bildens formsamling kan du identifiera varje PictureFrame, kontrollera om den underliggande IPPImage innehåller SVG‑innehåll och sedan spara den bilden till disk eller en ström i dess ursprungliga SVG‑format.
Följande kodexempel visar hur du extraherar en SVG‑bild från en bildram:
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();
}
Hämta transparens för en bild
Aspose.Slides låter dig hämta transparenseffekten som tillämpats på en bild. Denna Java‑kod demonstrerar operationen:
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);
}
}
Hämta ljusstyrka och kontrast för en bild
Aspose.Slides låter dig hämta ljusstyrke‑ och kontrasteffekten som tillämpats på en bild. Gränssnittet ILuminance representerar denna bildtransformering.
Denna Java‑kod visar hur du får ljusstyrke‑ och kontrastinställningarna från en bildram:
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();
}
Formatering av bildram
Aspose.Slides erbjuder många formateringsalternativ som kan tillämpas på en bildram. Med hjälp av dessa alternativ kan du ändra en bildram så att den uppfyller specifika krav.
- Skapa en instans av klassen Presentation.
- Hämta en bilds referens via dess index.
- Skapa ett IPPImage‑objekt genom att lägga till en bild i IImagescollection som är kopplad till presentationsobjektet och som kommer att användas för att fylla formen.
- Ange bildens bredd och höjd.
- Skapa en
PictureFramebaserat på bildens bredd och höjd via AddPictureFrame‑metoden som exponeras av IShapes‑objektet som är kopplat till den refererade bilden. - Lägg till bildramen (som innehåller bilden) på bilden.
- Ställ in bildramens linjefärg.
- Ställ in bildramens linjebredd.
- Rotera bildramen genom att ange ett positivt eller negativt värde.
- Ett positivt värde roterar bilden medurs.
- Ett negativt värde roterar bilden moturs.
- Lägg till bildramen (som innehåller bilden) på bilden.
- Spara den ändrade presentationen som en PPTX‑fil.
Denna Java‑kod demonstrerar processen för formatering av bildram:
// Instansierar Presentation-klassen som representerar PPTX
Presentation pres = new Presentation();
try {
// Hämtar den första bilden
ISlide sld = pres.getSlides().get_Item(0);
// Instansierar Image-klassen
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Lägger till bildram med bildens motsvarande höjd och bredd
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Tillämpar viss formatering på PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Skriver PPTX-filen till disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tips
Aspose har nyligen utvecklat en gratis Collage Maker. Om du någonsin behöver sammanfoga JPG/JPEG eller PNG‑bilder, skapa rutnät från foton, kan du använda den här tjänsten.Lägg till en bild som en länk
För att undvika stora presentationsstorlekar kan du lägga till bilder (eller videor) via länkar istället för att bädda in filerna direkt i presentationerna. Denna Java‑kod visar hur du lägger till en bild och video i en platshållare:
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();
}
Beskär bilder
Denna Java‑kod visar hur du beskär en befintlig bild på en bild:
Presentation pres = new Presentation();
// Skapar nytt bildobjekt
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Lägger till en bildram på en bild
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Beskär bilden (procentvärden)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Sparar resultatet
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Ta bort beskurna områden från en bildram
Om du vill ta bort de beskurna områdena av en bild som finns i en ram kan du använda metoden deletePictureCroppedAreas() . Denna metod returnerar den beskurna bilden eller originalbilden om beskärning är onödig.
Denna Java‑kod demonstrerar operationen:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Hämtar bildramen från den första bilden
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Tar bort beskurna områden i PictureFrame-bilden och returnerar den beskurna bilden
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Sparar resultatet
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
OBS
Metoden deletePictureCroppedAreas() lägger till den beskurna bilden i presentationens bildsamling. Om bilden endast används i den behandlade PictureFrame, kan denna konfiguration minska presentationsstorleken. Annars ökar antalet bilder i den resulterande presentationen.
Denna metod konverterar WMF/EMF‑metafiler till raster‑PNG‑bilder i beskärningsoperationen.
Komprimera bilder
Du kan komprimera en bild i en presentation med hjälp av metoden IPictureFillFormat.compressImage . Denna metod komprimerar en bild genom att minska dess storlek baserat på formens storlek och angiven upplösning, med möjlighet att ta bort beskurna områden.
Den justerar bildens storlek och upplösning på liknande sätt som PowerPoints funktion Picture Format > Compress Pictures > Resolution.
Följande Java‑exempel visar hur du komprimerar en bild i en presentation genom att ange en målupplösning och eventuellt ta bort beskurna områden:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimera bilden med en målupplösning på 150 DPI (webbupplösning) och ta bort beskurna områden.
boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
// Kontrollera resultatet av komprimeringen.
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();
}
Eller genom att ange ett eget DPI‑värde direkt:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Komprimera bilden till 150 DPI (webbupplösning), ta bort beskurna områden.
pictureFrame.getPictureFormat().compressImage(true, 150f);
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
OBS
Metoden konverterar bilden till en lägre upplösning baserat på formens storlek och angivet DPI. Beskurna regioner kan också tas bort för att optimera filstorleken.Om bilden är en metafil (WMF/EMF) eller SVG kommer komprimering inte att tillämpas. JPEG‑kvaliteten bevaras eller minskas något beroende på upplösning, på liknande sätt som PowerPoint hanterar högupplösta JPEG‑bilder.
Lås bildförhållande
Om du vill att en form som innehåller en bild ska behålla sitt bildförhållande även efter att du ändrat bildens dimensioner kan du använda metoden setAspectRatioLocked för att aktivera inställningen Lock Aspect Ratio.
Denna Java‑kod visar hur du låser en forms bildförhållande:
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);
// ställ in formen så att bildförhållandet bevaras vid storleksändring
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
OBS
Denna Lock Aspect Ratio-inställning bevarar endast formens bildförhållande och inte bilden den innehåller.Använd egenskapen StretchOff
Genom att använda egenskaperna StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight och StretchOffsetBottom från gränssnittet IPictureFillFormat och klassen PictureFillFormat kan du ange en fyllningsrektangel.
När stretching specificeras för en bild skalas en källrektangel för att passa den angivna fyllningsrektangeln. Varje kant på fyllningsrektangeln definieras av ett procentuellt avstånd från motsvarande kant på formens omgivande låda. Ett positivt procenttal anger en inskjutning medan ett negativt procenttal anger en utskjutning.
- Skapa en instans av Presentation.
- Hämta en bilds referens via dess index.
- Lägg till en rektangel
AutoShape. - Skapa en bild.
- Ställ in formens fyllningstyp.
- Ställ in formens bildfyllningsläge.
- Lägg till en bild för att fylla formen.
- Ange bildens förskjutningar från motsvarande kant på formens omgivande låda.
- Spara den ändrade presentationen som en PPTX‑fil.
Denna Java‑kod demonstrerar en process där en StretchOff‑egenskap används:
// Instansierar Presentation-klassen som representerar en PPTX-fil
Presentation pres = new Presentation();
try {
// Hämtar den första bilden
ISlide slide = pres.getSlides().get_Item(0);
// Instansierar ImageEx-klassen
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Lägger till en AutoShape inställd på Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Anger formens fyllningstyp
aShape.getFillFormat().setFillType(FillType.Picture);
// Anger formens bildfyllningsläge
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Anger bilden för att fylla formen
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Specificerar bildens förskjutningar från motsvarande kant på formens omgivande låda
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
// Skriver PPTX-filen till disk
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Hur kan jag ta reda på vilka bildformat som stöds för PictureFrame?
Aspose.Slides stöder både rasterbilder (PNG, JPEG, BMP, GIF osv.) och vektorbilder (t.ex. SVG) via bildobjektet som tilldelas en PictureFrame. Listan över stödjade format överlappar generellt med möjligheterna i bild‑ och konverteringsmotorn.
Hur påverkar tillägg av dussintals stora bilder PPTX‑storlek och prestanda?
Inbäddning av stora bilder ökar filstorlek och minnesanvändning; länka bilder håller presentationsstorleken nere men kräver att de externa filerna förblir åtkomliga. Aspose.Slides erbjuder möjligheten att lägga till bilder via länk för att minska filstorleken.
Hur kan jag låsa ett bildobjekt så att det inte av misstag flyttas/ändras i storlek?
Använd shape locks för en PictureFrame (t.ex. inaktivera flyttning eller storleksändring). Låsningsmekanismen stöds för olika formtyper, inklusive PictureFrame.
Bevaras SVG‑vektorens kvalitet vid export av en presentation till PDF/bilder?
Aspose.Slides låter dig extrahera en SVG från en PictureFrame som den ursprungliga vektorn. Vid export till PDF eller rasterformat kan resultatet rasteriseras beroende på exportinställningarna; faktumet att den ursprungliga SVG:n lagras som en vektor bekräftas av extraheringsbeteendet.