Képkeretek kezelése prezentációkban PHP használatával
Bevezetés
A képkeret egy alakzat, amely képet tartalmaz – ez olyan, mint egy kép a keretben.
Képet adhat hozzá egy diára képkereten keresztül. Így a kép formázását a képkeret formázásával végezheti el.
Tipp
Az Aspose ingyenes konvertereket biztosít – JPEG to PowerPoint és PNG to PowerPoint – amelyek lehetővé teszik a felhasználók számára, hogy gyorsan prezentációkat hozzanak létre képekből.Képkeret létrehozása
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Hozzon létre egy PPImage objektumot úgy, hogy képet ad hozzá a prezentáció objektumhoz tartozó ImageCollection gyűjteményhez, amelyet az alakzat kitöltésére használ.
- Adja meg a kép szélességét és magasságát.
- Hozzon létre egy PictureFrame objektumot a kép szélessége és magassága alapján a
addPictureFramemetódus segítségével, amely a hivatkozott diához tartozó shape objektumon keresztül érhető el. - Adjon hozzá egy képkeretet (amely tartalmazza a képet) a diához.
- Írja ki a módosított prezentációt PPTX fájlként.
Ez a PHP kód megmutatja, hogyan hozhat létre egy képkeretet:
# Példányosítja a Presentation osztályt, amely egy PPTX fájlt képvisel
$pres = new Presentation();
try {
# Lekéri az első diát
$sld = $pres->getSlides()->get_Item(0);
# Példányosítja az Image osztályt
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# Hozzáad egy képkeretet a kép megfelelő magasságával és szélességével
$sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# Kiírja a PPTX fájlt a lemezre
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Képkeret létrehozása relatív méretezéssel
A kép relatív skálázásának módosításával összetettebb képkeretet hozhat létre.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Adjon képet a prezentáció képgyűjteményéhez.
- Hozzon létre egy PPImage objektumot úgy, hogy képet ad hozzá a ImageCollection gyűjteményhez, amelyet a prezentáció objektum használ a shape kitöltésére.
- Adja meg a kép relatív szélességét és magasságát a képkeretben.
- Írja ki a módosított prezentációt PPTX fájlként.
Ez a PHP kód megmutatja, hogyan hozhat létre egy képkeretet relatív skálával:
# Példányosítja a Presentation osztályt, amely a PPTX-et képviseli
$pres = new Presentation();
try {
# Lekéri az első diát
$sld = $pres->getSlides()->get_Item(0);
# Példányosítja az Image osztályt
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# Hozzáad egy képkeretet a kép magasságával és szélességével megegyezően
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# Relatív méretezés beállítása szélesség és magasság
$pf->setRelativeScaleHeight(0.8);
$pf->setRelativeScaleWidth(1.35);
# Kiírja a PPTX fájlt a lemezre
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Raster képek kinyerése képkeretekből
Kinyerhet raster képeket a PictureFrame objektumokból, és elmentheti őket PNG, JPG és egyéb formátumokban. Az alábbi kódrészlet bemutatja, hogyan nyerhet ki egy képet a „sample.pptx” dokumentumból, és mentse el PNG formátumban.
$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();
}
SVG képek kinyerése képkeretekből
Amikor egy prezentáció SVG grafikákat tartalmaz, amelyek PictureFrame alakzatokba vannak ágyazva, az Aspose.Slides for PHP via Java lehetővé teszi az eredeti vektor képek teljes hitelességével történő visszanyerését. A dia shape gyűjteményének bejárásával azonosíthatja az egyes [PictureFrame] objektumokat, ellenőrizheti, hogy a mögöttes [PPImage] SVG tartalmat tartalmaz‑e, majd elmentheti a képet lemezre vagy stream‑re natív SVG formátumban.
Az alábbi kódrészlet bemutatja, hogyan nyerhet ki egy SVG képet egy képkeretből:
$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();
}
Kép átlátszóságának lekérése
Az Aspose.Slides lehetővé teszi, hogy lekérje egy képre alkalmazott átlátszósági effektust. Ez a PHP kód demonstrálja a műveletet:
$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);
}
}
Kép fényerősségének és kontrasztjának lekérése
Az Aspose.Slides lehetővé teszi, hogy lekérje egy képre alkalmazott fényerő és kontraszt effektust. A Luminance osztály képviseli ezt a képtranszformációs hatást.
Ez a PHP kód bemutatja, hogyan kérhető le a fényerő és kontraszt beállítás egy képkeretből:
$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();
}
Képkeret formázása
Az Aspose.Slides számos formázási lehetőséget kínál, amelyeket egy képkeretre alkalmazhat. Ezekkel a lehetőségekkel módosíthatja a képkeretet úgy, hogy megfeleljen a specifikus követelményeknek.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Hozzon létre egy PPImage objektumot úgy, hogy képet ad hozzá a ImageCollection gyűjteményhez, amelyet a prezentáció objektum a shape kitöltésére használ.
- Adja meg a kép szélességét és magasságát.
- Hozzon létre egy
PictureFrameobjektumot a kép szélessége és magassága alapján a addPictureFrame metódus segítségével, amely a ShapeCollection objektumon keresztül érhető el a hivatkozott dián. - Adja hozzá a képkeretet (amely tartalmazza a képet) a diához.
- Állítsa be a képkeret vonalszínét.
- Állítsa be a képkeret vonalvastagságát.
- Forgassa el a képkeretet egy pozitív vagy negatív értékkel.
- A pozitív érték azonnal óramutató járásával megegyező irányba forgatja a képet.
- A negatív érték az ellenkező irányba forgatja.
- Adja hozzá a képkeretet (amely tartalmazza a képet) a diához.
- Írja ki a módosított prezentációt PPTX fájlként.
Ez a PHP kód demonstrálja a képkeret formázási folyamatát:
# Példányosítja a Presentation osztályt, amely a PPTX-et képviseli
$pres = new Presentation();
try {
# Lekéri az első diát
$sld = $pres->getSlides()->get_Item(0);
# Példányosítja az Image osztályt
$imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
# Hozzáad egy képkeretet a kép magasságával és szélességével megegyezően
$pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
# Alkalmaz némi formázást a PictureFrameEx-re
$pf->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$pf->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$pf->getLineFormat()->setWidth(20);
$pf->setRotation(45);
# Kiírja a PPTX fájlt a lemezre
$pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Tipp
Az Aspose nemrég fejlesztett egy ingyenes Collage Maker alkalmazást. Ha valaha JPG/JPEG vagy PNG képeket kell összefésülnie, vagy fotó‑rácsokat szeretne létrehozni, használhatja ezt a szolgáltatást.Kép hozzáadása hivatkozásként
A nagy méretű prezentációk elkerülése érdekében képeket (vagy videókat) hivatkozásokként adhat hozzá ahelyett, hogy közvetlenül beágyazná a fájlokat. Ez a PHP kód megmutatja, hogyan adhat hozzá egy képet és egy videót egy helykitöltőhöz:
$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();
}
}
Képek vágása
Ez a PHP kód bemutatja, hogyan vághat le egy meglévő képet egy dián:
$pres = new Presentation();
# Új képobjektumot hoz létre
try {
$picture;
$image = Images->fromFile($imagePath);
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Képkeretet ad egy diához
$picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 100, 100, 420, 250, $picture);
# Levágja a képet (százalék értékek)
$picFrame->getPictureFormat()->setCropLeft(23.6);
$picFrame->getPictureFormat()->setCropRight(21.5);
$picFrame->getPictureFormat()->setCropTop(3);
$picFrame->getPictureFormat()->setCropBottom(31);
# Elmenti az eredményt
$pres->save($outPptxFile, SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Képkeret vágott területeinek törlése
Ha egy keretben lévő kép vágott területeit szeretné eltávolítani, használja a deletePictureCroppedAreas() metódust. Ez a metódus a vágott képet vagy az eredeti képet adja vissza, ha a vágás nem szükséges.
Ez a PHP kód demonstrálja a műveletet:
$presentation = new Presentation("PictureFrameCrop.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
# Lekéri a PictureFrame-et az első diáról
$picFrame = $slide->getShapes()->get_Item(0);
# Törli a PictureFrame kép vágott területeit és visszaadja a vágott képet
$croppedImage = $picFrame->getPictureFormat()->deletePictureCroppedAreas();
# Elmenti az eredményt
$presentation->save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
MEGJEGYZÉS
A deletePictureCroppedAreas() metódus hozzáadja a vágott képet a prezentáció képgyűjteményéhez. Ha a képet csak a feldolgozott PictureFrame használja, ez a beállítás csökkentheti a prezentáció méretét. Ellenkező esetben a végleges prezentációban a képek száma nőni fog.
Ez a metódus a WMF/EMF metafájlokat raster PNG képpé konvertálja a vágási művelet során.
Képek tömörítése
A kép tömöríthető egy prezentációban a PictureFillFormat::compressImage() metódus segítségével. Ez a metódus a kép méretét csökkenti a shape mérete és a megadott felbontás alapján, opcionálisan a vágott területek törlésével.
A kép méretét és felbontását úgy módosítja, mint a PowerPoint Picture Format → Compress Pictures → Resolution funkciója.
Az alábbi PHP példák bemutatják, hogyan lehet tömöríteni egy képet a prezentációban célfelbontás megadásával, és opcionálisan a vágott területek eltávolításával:
$presentation = new Presentation("demo.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$pictureFrame = $slide->getShapes()->get_Item(0);
# Tömöríti a képet 150 DPI (web felbontás) célfelbontással, és eltávolítja a vágott területeket.
$result = $pictureFrame->getPictureFormat()->compressImage(true, PicturesCompression::Dpi150);
# Ellenőrzi a tömörítés eredményét.
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();
}
Vagy egyéni DPI érték közvetlen használatával:
$presentation = new Presentation("demo.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$pictureFrame = $slide->getShapes()->get_Item(0);
# Tömöríti a képet 150 DPI-re (web felbontás), és eltávolítja a vágott területeket.
$pictureFrame->getPictureFormat()->compressImage(true, 150.0);
$presentation->save("CompressedImage.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
MEGJEGYZÉS
A metódus a képet alacsonyabb felbontásra konvertálja a shape mérete és a megadott DPI alapján. A vágott területek is törölhetők a fájlméret optimalizálása érdekében.Ha a kép metafájl (WMF/EMF) vagy SVG, a tömörítés nem kerül alkalmazásra. A JPEG minőség megmarad vagy enyhén csökken a felbontás függvényében, ahogyan a PowerPoint kezeli a nagy felbontású JPEG‑eket.
Oldalarány zárolása
Ha azt szeretné, hogy egy képet tartalmazó shape megőrizze az arányait akkor is, ha megváltoztatja a kép méretét, használja a setAspectRatioLocked metódust az Oldalarány zárolása beállítás aktiválásához.
Ez a PHP kód megmutatja, hogyan lehet zárolni egy shape oldalarányát:
$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);
# állítsa be a shape-et, hogy a méretezéskor megőrizze az oldalarányt
$pictureFrame->getPictureFrameLock()->setAspectRatioLocked(true);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
MEGJEGYZÉS
Ez az Oldalarány zárolása beállítás csak a shape arányát őrzi meg, nem pedig a benne lévő képet.StretchOff tulajdonság használata
A setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight és setStretchOffsetBottom metódusok a PictureFillFormat osztályból lehetővé teszik egy kitöltési téglalap meghatározását.
Amikor egy képhez nyújtást adunk meg, egy forrástéglalap skálázódik, hogy illeszkedjen a megadott kitöltési téglalaphoz. A kitöltési téglalap minden oldala egy százalékos eltolással van definiálva a shape határoló dobozának megfelelő oldalához képest. A pozitív százalékos érték befelé tolást, a negatív pedig kifelé tolást jelent.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Adjon hozzá egy
AutoShapetéglalapot. - Hozzon létre egy képet.
- Állítsa be a shape kitöltési típusát.
- Állítsa be a shape kép kitöltési módját.
- Adjon hozzá egy képet a shape kitöltéséhez.
- Adja meg a kép eltolásait a shape határoló dobozának megfelelő oldalához képest.
- Írja ki a módosított prezentációt PPTX fájlként.
Ez a PHP kód demonstrálja a StretchOff tulajdonság használatát egy folyamatban:
# Példányosítja a Presentation osztályt, amely egy PPTX fájlt képvisel
$pres = new Presentation();
try {
# Lekéri az első diát
$slide = $pres->getSlides()->get_Item(0);
# Példányosítja az ImageEx osztályt
$picture;
$image = Images->fromFile("aspose-logo.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# Automatikus alakzatot ad hozzá, amely Rechteck típusú
$aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
# Beállítja az alakzat kitöltésének típusát
$aShape->getFillFormat()->setFillType(FillType::Picture);
# Beállítja az alakzat kép kitöltési módját
$aShape->getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode->Stretch);
# Beállítja a képet az alakzat kitöltéséhez
$aShape->getFillFormat()->getPictureFillFormat()->getPicture()->setImage($picture);
# Megadja a kép eltolásait a shape határoló dobozának megfelelő oldalhoz képest
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetLeft(25);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetRight(25);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetTop(-20);
$aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetBottom(-10);
# Kiírja a PPTX fájlt a lemezre
$pres->save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
GYIK
Hogyan deríthetem ki, mely képformátumok támogatottak a PictureFrame‑hez?
Az Aspose.Slides támogatja a raszter képeket (PNG, JPEG, BMP, GIF stb.) és a vektor képeket (például SVG) a PictureFrame objektumhoz rendelt képobjektumon keresztül. A támogatott formátumok listája általában átfedi a slide és a kép konverziós motor képességeit.
Hogyan befolyásolja a tucatnyi nagy kép hozzáadása a PPTX méretét és teljesítményét?
A nagy képek beágyazása növeli a fájlméretet és a memóriahasználatot; a képek hivatkozásként való hozzáadása segít a prezentáció méretének csökkentésében, ám a külső fájloknak elérhetőnek kell maradniuk. Az Aspose.Slides lehetőséget biztosít a képek hivatkozásként való hozzáadására a fájlméret csökkentése érdekében.
Hogyan zárolhatok egy képobjektumot a véletlen mozgatás/átméretezés ellen?
Használja a shape locks lehetőséget egy PictureFrame esetén (például a mozgatás vagy átméretezés letiltásával). A zárási mechanizmus különböző shape típusoknál támogatott, beleértve a [PictureFrame] objektumokat is.
Megmarad-e az SVG vektorhitelesség exportáláskor PDF‑be/képekbe?
Az Aspose.Slides lehetővé teszi egy SVG kinyerését egy PictureFrame‑ből eredeti vektorként. PDF‑re (export to PDF) vagy raszter formátumra (export to PNG) történő exportáláskor az eredmény függhet az export beállításaitól; az SVG eredeti vektorként tárolása azonban a kinyerési viselkedés által megerősített.