Hantera bildramar i presentationer med PHP
Introduktion
En bildram är en form som innehåller en bild—den är som en bild i en ram.
Du kan lägga till en bild på en bildspelssida via en bildram. På så sätt kan du formatera bilden genom att formatera bildramen.
Tip
Aspose tillhandahåller gratiskonverterare—JPEG to PowerPoint och PNG to PowerPoint—som låter användare skapa presentationer snabbt från bilder.Skapa en bildram
- Skapa en instans av klassen Presentation.
- Hämta en bildspelsreferens via dess index.
- Skapa ett PPImage‑objekt genom att lägga till en bild i ImageCollection som är associerad med 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 form‑objektet som är associerat med den refererade bilden. - Lägg till en bildram (innehållande bilden) på bilden.
- Skriv den modifierade presentationen som en PPTX‑fil.
Den här PHP‑koden visar hur du skapar en bildram:
# Skapar en instans av Presentation-klassen som representerar en PPTX-fil
$pres = new Presentation();
try {
# Hämtar den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Skapar en instans av Image-klassen
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.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 (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Skapa en bildram med relativ skalning
Genom att ändra en bilds relativa skalning kan du skapa en mer avancerad bildram.
- Skapa en instans av klassen Presentation.
- Hämta en bildspelsreferens via dess index.
- Lägg till en bild i presentationens bildsamling.
- Skapa ett PPImage‑objekt genom att lägga till en bild i ImageCollection som är associerad med presentationsobjektet och som kommer att användas för att fylla formen.
- Ange bildens relativa bredd och höjd i bildramen.
- Skriv den modifierade presentationen som en PPTX‑fil.
Den här PHP‑koden visar hur du skapar en bildram med relativ skalning:
# Instansiera Presentation-klassen som representerar PPTX
$pres = new Presentation();
try {
# Hämta den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Instansiera Image-klassen
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# Lägg till bildram med bildens motsvarande höjd och bredd
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# Ställer in relativ skalning för bredd och höjd
$pf->setRelativeScaleHeight(0.8);
$pf->setRelativeScaleWidth(1.35);
# Skriver PPTX-filen till disk
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$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 = new Presentation("sample.pptx");
try {
$firstSlide = $presentation->getSlides()->get_Item(0);
$firstShape = $firstSlide->getShapes()->get_Item(0);
if (java_instanceof($firstShape, new JavaClass("com.aspose.slides.PictureFrame"))) {
$pictureFrame = $firstShape;
try {
$slideImage = $pictureFrame->getPictureFormat()->getPicture()->getImage()->getImage();
$slideImage->save("slide_1_shape_1.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
}
} catch (JavaException $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 PHP via Java dig hämta de ursprungliga vektorbilderna med full integritet. Genom att gå igenom bildens form‑samling kan du identifiera varje [PictureFrame], kontrollera om den underliggande [PPImage] 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 = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.PictureFrame"))) {
$svgImage = $shape->getPictureFormat()->getPicture()->getImage()->getSvgImage();
if ($svgImage !== null) {
file_put_contents("output.svg", $svgImage->getSvgData());
}
}
} finally {
$presentation->dispose();
}
Hämta transparens för en bild
Aspose.Slides låter dig hämta transparenseffekten som applicerats på en bild. Den här PHP‑koden demonstrerar operationen:
$presentation = new Presentation("Test.pptx");
$pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
foreach($imageTransform as $effect) {
if (java_instanceof($effect, new JavaClass("com.aspose.slides.AlphaModulateFixed"))) {
$alphaModulateFixed = $effect;
$transparencyValue = 100 - $alphaModulateFixed->getAmount();
echo("Picture transparency: " . $transparencyValue);
}
}
Hämta ljusstyrka och kontrast för en bild
Aspose.Slides låter dig hämta ljusstyrke‑ och kontrasteffekten som applicerats på en bild. Klassen Luminance representerar denna bildtransformations‑effekt.
Den här PHP‑koden visar hur du får ljusstyrke‑ och kontrastinställningarna från en bildram:
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
$pictureFrame = $shape;
$imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
$imageTransformCount = java_values($imageTransform->size());
for ($index = 0; $index < $imageTransformCount; $index++) {
$effect = $imageTransform->get_Item($index);
if (java_instanceof($effect, new JavaClass("com.aspose.slides.Luminance"))) {
$luminance = $effect->getEffective();
$brightness = java_values($luminance->getBrightness());
$contrast = java_values($luminance->getContrast());
echo("Brightness: " . $brightness . PHP_EOL);
echo("Contrast: " . $contrast . PHP_EOL);
}
}
} finally {
$presentation->dispose();
}
Formatering av bildram
Aspose.Slides erbjuder många formateringsalternativ som kan tillämpas på en bildram. Med dessa alternativ kan du ändra en bildram så att den uppfyller specifika krav.
- Skapa en instans av klassen Presentation.
- Hämta en bildspelsreferens via dess index.
- Skapa ett PPImage‑objekt genom att lägga till en bild i ImageCollection som är associerad med presentationsobjektet och som kommer att användas för att fylla formen.
- Ange bildens bredd och höjd.
- Skapa ett
PictureFramebaserat på bildens bredd och höjd via addPictureFrame‑metoden som exponeras av ShapeCollection‑objektet som är associerat med den refererade bilden. - Lägg till bildramen (innehållande bilden) på bilden.
- Ställ in bildramens linjefärg.
- Ställ in bildramens linjebredd.
- Rotera bildramen genom att ge den ett positivt eller negativt värde.
- Ett positivt värde roterar bilden medurs.
- Ett negativt värde roterar bilden moturs.
- Lägg till bildramen (innehållande bilden) på bilden.
- Skriv den modifierade presentationen som en PPTX‑fil.
Den här PHP‑koden demonstrerar processen för formatering av bildram:
# Instansierar Presentation-klassen som representerar PPTX
$pres = new Presentation();
try {
# Hämtar den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Instansierar Image-klassen
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# Lägger till bildram med bildens motsvarande höjd och bredd
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# Applicerar viss formatering på PictureFrameEx
$pf->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$pf->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$pf->getLineFormat()->setWidth(20);
$pf->setRotation(45);
# Skriver PPTX-filen till disk
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Tip
Aspose har nyligen utvecklat en gratis Collage Maker. Om du någonsin behöver sammanfoga JPG/JPEG eller PNG‑bilder, skapa gallerier 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 presentationer. Den här PHP‑koden visar hur du lägger till en bild och video i en platshållare:
$presentation = new Presentation("input.pptx");
try {
$shapesToRemove = new Java("java.util.ArrayList");
$shapesCount = $presentation->getSlides()->get_Item(0)->getShapes()->size();
for($i = 0; $i < java_values($shapesCount) ; $i++) {
$autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item($i);
if (java_is_null($autoShape->getPlaceholder())) {
continue;
}
switch ($autoShape->getPlaceholder()->getType()) {
case PlaceholderType::Picture :
$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 :
$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;
}
}
foreach($shapesToRemove as $shape) {
$presentation->getSlides()->get_Item(0)->getShapes()->remove($shape);
}
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Beskär bilder
Den här PHP‑koden visar hur du beskär en befintlig bild på en bild:
$pres = new Presentation();
# Skapar nytt bildobjekt
try {
$picture;
$image = Images->fromFile($imagePath);
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Lägger till en PictureFrame på en bild
$picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 100, 100, 420, 250, $picture);
# Beskär bilden (procentvärden)
$picFrame->getPictureFormat()->setCropLeft(23.6);
$picFrame->getPictureFormat()->setCropRight(21.5);
$picFrame->getPictureFormat()->setCropTop(3);
$picFrame->getPictureFormat()->setCropBottom(31);
# Sparar resultatet
$pres->save($outPptxFile, SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ta bort beskurna områden i 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 inte behövs.
Den här PHP‑koden demonstrerar operationen:
$presentation = new Presentation("PictureFrameCrop.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
# Hämtar PictureFrame från den första bilden
$picFrame = $slide->getShapes()->get_Item(0);
# Tar bort beskurna områden i PictureFrame‑bilden och returnerar den beskurna bilden
$croppedImage = $picFrame->getPictureFormat()->deletePictureCroppedAreas();
# Sparar resultatet
$presentation->save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
NOTE
Metoden deletePictureCroppedAreas() lägger till den beskurna bilden i presentationens bildsamling. Om bilden enbart används i den bearbetade PictureFrame, kan denna inställning 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 metoden PictureFillFormat::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å samma sätt som PowerPoints Picture Format -> Compress Pictures -> Resolution‑funktion.
Följande PHP‑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 = new Presentation("demo.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$pictureFrame = $slide->getShapes()->get_Item(0);
# Komprimera bilden med en målupplösning på 150 DPI (web-upplösning) och ta bort beskurna områden.
$result = $pictureFrame->getPictureFormat()->compressImage(true, PicturesCompression::Dpi150);
# Kontrollera resultatet av komprimeringen.
if ($result) {
echo "Image successfully compressed.";
} else {
echo "Image compression failed or no changes were necessary.";
}
$presentation->save("CompressedImage.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Eller genom att använda ett eget DPI‑värde direkt:
$presentation = new Presentation("demo.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$pictureFrame = $slide->getShapes()->get_Item(0);
# Komprimera bilden till 150 DPI (web-upplösning), ta bort beskurna områden.
$pictureFrame->getPictureFormat()->compressImage(true, 150.0);
$presentation->save("CompressedImage.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
NOTE
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, tillämpas ingen kompression. JPEG‑kvaliteten bevaras eller minskas något beroende på upplösning, på samma 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 sätta Lock Aspect Ratio-inställningen.
Den här PHP‑koden visar hur du låser en forms bildförhållande:
$pres = new Presentation("pres.pptx");
try {
$layout = $pres->getLayoutSlides()->getByType(SlideLayoutType::Custom);
$emptySlide = $pres->getSlides()->addEmptySlide($layout);
$picture;
$image = Images->fromFile("image.png");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
$pictureFrame = $emptySlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $presImage->getWidth(), $presImage->getHeight(), $picture);
# sätt formen så att den bevarar bildförhållandet vid storleksändring
$pictureFrame->getPictureFrameLock()->setAspectRatioLocked(true);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
NOTE
Denna Lock Aspect Ratio-inställning bevarar bara bildförhållandet för formen och inte bilden den innehåller.Använd egenskapen StretchOff
Genom att använda metoderna setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight och setStretchOffsetBottom från klassen PictureFillFormat kan du specificera en fyllningsrektangel.
När stretchning anges för en bild skalas en källrektangel för att passa den specificerade fyllningsrektangeln. varje kant av fyllningsrektangeln definieras av en procentuell förskjutning från motsvarande kant av formens omgränsningsruta. En positiv procentsats anger en infogning medan en negativ procentsats anger en utstickning.
- Skapa en instans av klassen Presentation.
- Hämta en bildspelsreferens 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 av formens omgränsningsruta
- Skriv den modifierade presentationen som en PPTX‑fil.
Den här PHP‑koden demonstrerar en process där StretchOff‑egenskapen används:
# Instansierar Presentation-klassen som representerar en PPTX-fil
$pres = new Presentation();
try {
# Hämtar den första bilden
$slide = $pres->getSlides()->get_Item(0);
# Instansierar ImageEx-klassen
$picture;
$image = Images->fromFile("aspose-logo.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Lägger till en AutoShape inställd på rektangel
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Ställer in formens fyllningstyp
$aShape->getFillFormat()->setFillType(FillType::Picture);
# Ställer in formens bildfyllningsläge
$aShape->getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode->Stretch);
# Sätter bilden för att fylla formen
$aShape->getFillFormat()->getPictureFillFormat()->getPicture()->setImage($picture);
# Anger bildens förskjutningar från motsvarande kant av formens omkadningsruta
$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 (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Hur kan jag ta reda på vilka bildformat som stöds för PictureFrame?
Aspose.Slides stödjer både rasterbilder (PNG, JPEG, BMP, GIF osv.) och vektorbilder (t.ex. SVG) via bildobjektet som tilldelas en PictureFrame. Listan över stödda format överlappar generellt med funktionerna i bildspels- och bildkonverteringsmotorn.
Hur påverkar det PPTX‑storlek och prestanda att lägga till dussintals stora bilder?
Att bädda in stora bilder ökar filstorlek och minnesförbrukning; att länka bilder hjälper hålla presentationsstorleken nere men kräver att de externa filerna förblir åtkomliga. Aspose.Slides erbjuder möjlighet att lägga till bilder via länkar för att minska filstorleken.
Hur kan jag låsa ett bildobjekt så att det inte av misstag flyttas eller skalas?
Använd shape locks för en PictureFrame (t.ex. inaktivera flyttning eller skalning). Låsningsmekanismen stöds för olika formtyper, inklusive PictureFrame.
Bevaras SVG‑vektorkvaliteten vid export av en presentation till PDF/bilder?
Aspose.Slides låter dig extrahera en SVG från en PictureFrame som den ursprungliga vektorn. När du exporterar till PDF eller rasterformat kan resultatet rasteriseras beroende på exportinställningarna; det faktum att den ursprungliga SVG‑filen sparas som en vektor bekräftas av extraheringsbeteendet.