Optimalizace správy obrázků v prezentacích pomocí PHP
Úvod
Obrázky činí prezentace poutavějšími a zajímavějšími. V Microsoft PowerPoint můžete do snímků vložit obrázky ze souboru, internetu nebo jiných míst. Podobně Aspose.Slides umožňuje přidávat obrázky do snímků ve vašich prezentacích různými postupy.
Tip
Aspose poskytuje bezplatné převodníky—JPEG do PowerPointu a PNG do PowerPointu—které umožňují rychle vytvořit prezentace z obrázků.Info
Pokud chcete přidat obrázek jako objekt rámce—zejména pokud plánujete použít standardní možnosti formátování k úpravě jeho velikosti, přidání efektů atd.—podívejte se na Rámec obrázku.Poznámka
Můžete manipulovat s operacemi vstupu/výstupu zahrnujícími obrázky a PowerPoint prezentace pro převod obrázku z jednoho formátu do druhého. Viz tyto stránky: převod obrázku na JPG; převod JPG na obrázek; převod JPG na PNG, převod PNG na JPG; převod PNG na SVG, převod SVG na PNG.Aspose.Slides podporuje operace s obrázky v těchto populárních formátech: JPEG, PNG, GIF a dalších.
Přidání lokálně uložených obrázků do snímků
Můžete na snímek v prezentaci přidat jeden nebo několik obrázků z vašeho počítače. Tento ukázkový kód vám ukazuje, jak přidat obrázek do snímku:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$picture;
$image = Images->fromFile("image.png");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
$slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $picture);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání obrázků z webu do snímků
Pokud obrázek, který chcete do snímku přidat, není k dispozici ve vašem počítači, můžete jej přidat přímo z webu.
Tento ukázkový kód vám ukazuje, jak přidat obrázek z webu do snímku :
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$imageUrl = new URL("[REPLACE WITH URL]");
$connection = $imageUrl->openConnection();
$inputStream = $connection->getInputStream();
$outputStream = new Java("java.io.ByteArrayOutputStream");
$Array = new java_class("java.lang.reflect.Array");
$Byte = new JavaClass("java.lang.Byte");
try {
$buffer = $Array->newInstance($Byte, 1024);
$read;
while ($read = $inputStream->read($buffer, 0, $Array->getLength($buffer)) != -1) {
$outputStream->write($buffer, 0, $read);
}
$outputStream->flush();
$image = $pres->getImages()->addImage($outputStream->toByteArray());
$slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $image);
} finally {
if (!java_is_null($inputStream)) {
$inputStream->close();
}
$outputStream->close();
}
$pres->save("pres.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání obrázků do hlavních snímků (Slide Masters)
Hlavní snímek je vrchní snímek, který ukládá a řídí informace (téma, rozvržení, atd.) o všech snímcích pod ním. Když tedy přidáte obrázek do hlavního snímku, tento obrázek se objeví na každém snímku pod tímto hlavním snímkem.
Tento Java ukázkový kód vám ukazuje, jak přidat obrázek do hlavního snímku:
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$masterSlide = $slide->getLayoutSlide()->getMasterSlide();
$picture;
$image = Images->fromFile("image.png");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
$masterSlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $picture);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání obrázků jako pozadí snímků
Můžete se rozhodnout použít obrázek jako pozadí pro konkrétní snímek nebo několik snímků. V takovém případě se podívejte, jak nastavit obrázek jako pozadí snímku.
Přidání SVG do prezentací
Můžete přidat nebo vložit jakýkoli obrázek do prezentace pomocí metody addPictureFrame patřící do třídy ShapeCollection.
Pro vytvoření objektu obrázku založeného na SVG obrázku můžete postupovat takto:
- Vytvořte objekt SvgImage pro vložení do ImageShapeCollection
- Vytvořte objekt PPImage z ISvgImage
- Vytvořte objekt PictureFrame pomocí třídy PPImage
Tento ukázkový kód vám ukazuje, jak implementovat výše uvedené kroky pro přidání SVG obrázku do prezentace:
# Vytvořte instanci třídy Presentation, která představuje soubor PPTX
$pres = new Presentation();
try {
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
$dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "image.svg"));
$bytes = $Array->newInstance($Byte, $dis->available());
$dis->readFully($bytes);
} finally {
if (!java_is_null($dis)) $dis->close();
}
$svgContent = new String($bytes);
$svgImage = new SvgImage($svgContent);
$ppImage = $pres->getImages()->addImage($svgImage);
$pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 0, 0, $ppImage->getWidth(), $ppImage->getHeight(), $ppImage);
$pres->save("output.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Převod SVG na sadu tvarů
Převod SVG na sadu tvarů v Aspose.Slides je podobný funkčnosti PowerPointu používané pro práci s SVG obrázky:

Funkčnost je poskytována jednou z přetížených metod addGroupShape třídy ShapeCollection, která přijímá objekt SvgImage jako první argument.
Tento ukázkový kód vám ukazuje, jak použít popsanou metodu k převodu SVG souboru na sadu tvarů:
# Vytvořit novou prezentaci
$presentation = new Presentation();
try {
# Načíst obsah souboru SVG
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
$dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "image.svg"));
$bytes = $Array->newInstance($Byte, $dis->available());
$dis->readFully($bytes);
} finally {
if (!java_is_null($dis)) $dis->close();
}
$svgContent = $bytes;
# Vytvořit objekt SvgImage
$svgImage = new SvgImage($svgContent);
# Získat velikost snímku
$slideSize = $presentation->getSlideSize()->getSize();
# Převést SVG obrázek na skupinu tvarů a přizpůsobit jej velikosti snímku
$presentation->getSlides()->get_Item(0)->getShapes()->addGroupShape($svgImage, 0.0, 0.0, $slideSize->getWidth(), $slideSize->getHeight());
# Uložit prezentaci ve formátu PPTX
$presentation->save("output.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Přidání obrázků jako EMF do snímků
Aspose.Slides for PHP via Java umožňuje generovat EMF obrázky z excelových listů a přidávat je jako EMF do snímků pomocí Aspose.Cells.
Tento ukázkový kód vám ukazuje, jak provést popsaný úkol:
$book = new Workbook("chart.xlsx");
$sheet = $book->getWorksheets()->get(0);
$options = new ImageOrPrintOptions();
$options->setHorizontalResolution(200);
$options->setVerticalResolution(200);
$options->setImageType(ImageType::EMF);
# Uložit sešit do proudu
$sr = new SheetRender($sheet, $options);
$pres = new Presentation();
try {
$pres->getSlides()->removeAt(0);
$EmfSheetName = "";
for($j = 0; $j < java_values($sr->getPageCount()) ; $j++) {
$EmfSheetName = "test" . $sheet->getName() . " Page" . $j + 1 . ".out.emf";
$sr->toImage($j, $EmfSheetName);
$picture;
$image = Images->fromFile($EmfSheetName);
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
$slide = $pres->getSlides()->addEmptySlide($pres->getLayoutSlides()->getByType(SlideLayoutType::Blank));
$m = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 0, 0, $pres->getSlideSize()->getSize()->getWidth(), $pres->getSlideSize()->getSize()->getHeight(), $picture);
}
$pres->save("output.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Nahrazení obrázků ve sbírce obrázků
Aspose.Slides umožňuje nahradit obrázky uložené v kolekci obrázků prezentace (včetně těch, které používají tvary snímků). Tato sekce ukazuje několik přístupů k aktualizaci obrázků v kolekci. API poskytuje jednoduché metody pro nahrazení obrázku pomocí surových bajtových dat, instance IImage nebo jiného obrázku, který již v kolekci existuje.
Postupujte podle následujících kroků:
- Načtěte soubor prezentace, který obsahuje obrázky, pomocí třídy Presentation.
- Načtěte nový obrázek ze souboru do bajtového pole.
- Nahraďte cílový obrázek novým obrázkem pomocí bajtového pole.
- Ve druhém přístupu načtěte obrázek do objektu IImage a nahraďte cílový obrázek tímto objektem.
- Ve třetím přístupu nahraďte cílový obrázek obrázkem, který již v kolekci prezentace existuje.
- Uložte upravenou prezentaci jako soubor PPTX.
// Vytvořte instanci třídy Presentation, která představuje soubor prezentace.
$presentation = new Presentation("sample.pptx");
try {
// První způsob.
$imagePath = (new Java("java.io.File", "image0.jpeg"))->toPath();
$imageData = (new Java("java.nio.file.Files"))->readAllBytes($imagePath);
$oldImage = $presentation->getImages()->get_Item(0);
$oldImage->replaceImage($imageData);
// Druhý způsob.
$newImage = Images::fromFile("image1.png");
$oldImage = $presentation->getImages()->get_Item(1);
$oldImage->replaceImage($newImage);
$newImage->dispose();
// Třetí způsob.
$oldImage = $presentation->getImages()->get_Item(2);
$oldImage->replaceImage($presentation->getImages()->get_Item(3));
// Uložit prezentaci do souboru.
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Info
Pomocí Aspose FREE Text to GIF převodníku můžete snadno animovat texty, vytvářet GIFy z textu atd.Často kladené otázky
Zůstane po vložení původní rozlišení obrázku zachováno?
Ano. Původní pixely jsou zachovány, ale finální vzhled závisí na tom, jak je obrázek škálován na snímku a jaká komprese je aplikována při uložení.
Jaký je nejlepší způsob, jak najednou nahradit stejné logo na desítkách snímků?
Umístěte logo na hlavní snímek nebo rozvržení a nahraďte jej v kolekci obrázků prezentace — aktualizace se projeví ve všech prvcích, které tento zdroj používají.
Může být vložený SVG převeden na editovatelné tvary?
Ano. SVG můžete převést na skupinu tvarů, po čemž se jednotlivé části stanou editovatelnými pomocí standardních vlastností tvaru.
Jak nastavit obrázek jako pozadí pro více snímků najednou?
Přiřaďte obrázek jako pozadí na hlavním snímku nebo příslušném rozvržení — všechny snímky používající tento hlavní snímek/rozvržení zdědí pozadí.
Jak zabránit „nafouknutí“ prezentace kvůli mnoha obrázkům?
Znovu použijte jediný zdroj obrázku místo duplicit, zvolte rozumná rozlišení, aplikujte kompresi při ukládání a opakovanou grafiku umístěte na hlavní snímek, kde je to vhodné.