Optymalizacja zarządzania obrazami w prezentacjach przy użyciu PHP
Wprowadzenie
Obrazy sprawiają, że prezentacje są bardziej angażujące i interesujące. W Microsoft PowerPoint możesz wstawiać obrazy z pliku, internetu lub innych miejsc na slajdy. Podobnie Aspose.Slides umożliwia dodawanie obrazów do slajdów w Twoich prezentacjach przy użyciu różnych metod.
Tip
Aspose udostępnia darmowe konwertery—JPEG do PowerPoint i PNG do PowerPoint—pozwalające szybko tworzyć prezentacje z obrazów.Info
Jeśli chcesz dodać obraz jako obiekt ramki — szczególnie jeśli zamierzasz używać standardowych opcji formatowania, aby zmienić jego rozmiar, dodać efekty itd. — zobacz Ramkę obrazu.Note
Możesz manipulować operacjami wejścia/wyjścia obejmującymi obrazy i prezentacje PowerPoint, aby konwertować obraz z jednego formatu na inny. Zobacz te strony: konwertuj obraz do JPG; konwertuj JPG do obrazu; konwertuj JPG do PNG; konwertuj PNG do JPG; konwertuj PNG do SVG; konwertuj SVG do PNG.Aspose.Slides obsługuje operacje na obrazach w następujących popularnych formatach: JPEG, PNG, GIF i inne.
Dodaj obrazy przechowywane lokalnie do slajdów
Możesz dodać jeden lub wiele obrazów z komputera na slajd w prezentacji. Ten przykładowy kod pokazuje, jak dodać obraz do slajdu:
$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();
}
}
Dodaj obrazy z sieci do slajdów
Jeśli obraz, który chcesz dodać do slajdu, nie jest dostępny na Twoim komputerze, możesz dodać go bezpośrednio z sieci.
Ten przykładowy kod pokazuje, jak dodać obraz z sieci do slajdu :
$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();
}
}
Dodaj obrazy do mistrza slajdów
Mistrz slajdu (slide master) jest najważniejszym slajdem, który przechowuje i kontroluje informacje (motyw, układ itp.) o wszystkich slajdach pod nim. Dlatego, gdy dodasz obraz do mistrza slajdu, obraz ten pojawi się na każdym slajdzie pod tym mistrzem.
Ten przykładowy kod Java pokazuje, jak dodać obraz do mistrza slajdu:
$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();
}
}
Dodaj obrazy jako tło slajdu
Możesz zdecydować się użyć obrazu jako tła dla konkretnego slajdu lub kilku slajdów. W takim przypadku musisz sprawdzić, jak Ustawić obraz jako tło slajdu.
Dodaj SVG do prezentacji
Możesz dodać lub wstawić dowolny obraz do prezentacji, używając metody addPictureFrame należącej do klasy ShapeCollection.
Aby utworzyć obiekt obrazu na podstawie obrazu SVG, możesz zrobić to w ten sposób:
- Utwórz obiekt SvgImage, aby wstawić go do ImageShapeCollection
- Utwórz obiekt PPImage z ISvgImage
- Utwórz obiekt PictureFrame przy użyciu klasy PPImage
Ten przykładowy kod pokazuje, jak wdrożyć powyższe kroki, aby dodać obraz SVG do prezentacji:
# Utwórz instancję klasy Presentation reprezentującej plik 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();
}
}
Konwertuj SVG do zestawu kształtów
Konwersja SVG do zestawu kształtów w Aspose.Slides jest podobna do funkcji PowerPoint, używanej do pracy z obrazami SVG:

Funkcjonalność jest udostępniana przez jedną z przeciążeń metody addGroupShape klasy ShapeCollection, która przyjmuje obiekt SvgImage jako pierwszy argument.
Ten przykładowy kod pokazuje, jak użyć opisanej metody do konwersji pliku SVG na zestaw kształtów:
# Utwórz nową prezentację
$presentation = new Presentation();
try {
# Odczytaj zawartość pliku 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;
# Utwórz obiekt SvgImage
$svgImage = new SvgImage($svgContent);
# Pobierz rozmiar slajdu
$slideSize = $presentation->getSlideSize()->getSize();
# Konwertuj obraz SVG na grupę kształtów, skalując go do rozmiaru slajdu
$presentation->getSlides()->get_Item(0)->getShapes()->addGroupShape($svgImage, 0.0, 0.0, $slideSize->getWidth(), $slideSize->getHeight());
# Zapisz prezentację w formacie PPTX
$presentation->save("output.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Dodaj obrazy jako EMF do slajdów
Aspose.Slides for PHP via Java umożliwia generowanie obrazów EMF z arkuszy Excel i dodawanie tych obrazów jako EMF na slajdach przy użyciu Aspose.Cells.
Ten przykładowy kod pokazuje, jak wykonać opisane zadanie:
$book = new Workbook("chart.xlsx");
$sheet = $book->getWorksheets()->get(0);
$options = new ImageOrPrintOptions();
$options->setHorizontalResolution(200);
$options->setVerticalResolution(200);
$options->setImageType(ImageType::EMF);
# Zapisz skoroszyt do strumienia
$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();
}
}
Zastąp obrazy w kolekcji obrazów
Aspose.Slides pozwala zastąpić obrazy przechowywane w kolekcji obrazów prezentacji (w tym te używane przez kształty slajdów). Ten rozdział prezentuje kilka podejść do aktualizacji obrazów w kolekcji. API udostępnia proste metody zastąpienia obrazu przy użyciu surowych danych bajtowych, instancji IImage lub innego obrazu już istniejącego w kolekcji.
Postępuj zgodnie z poniższymi krokami:
- Załaduj plik prezentacji zawierający obrazy przy użyciu klasy Presentation.
- Wczytaj nowy obraz z pliku do tablicy bajtów.
- Zastąp docelowy obraz nowym obrazem używając tablicy bajtów.
- W drugim podejściu wczytaj obraz do obiektu IImage i zastąp docelowy obraz tym obiektem.
- W trzecim podejściu zastąp docelowy obraz obrazem, który już istnieje w kolekcji obrazów prezentacji.
- Zapisz zmodyfikowaną prezentację jako plik PPTX.
// Utwórz instancję klasy Presentation, która reprezentuje plik prezentacji.
$presentation = new Presentation("sample.pptx");
try {
// Pierwszy sposób.
$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);
// Drugi sposób.
$newImage = Images::fromFile("image1.png");
$oldImage = $presentation->getImages()->get_Item(1);
$oldImage->replaceImage($newImage);
$newImage->dispose();
// Trzeci sposób.
$oldImage = $presentation->getImages()->get_Item(2);
$oldImage->replaceImage($presentation->getImages()->get_Item(3));
// Zapisz prezentację do pliku.
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Info
Korzystając z darmowego konwertera Aspose Text to GIF, możesz łatwo animować teksty, tworzyć GIFy z tekstów itp.FAQ
Czy oryginalna rozdzielczość obrazu pozostaje niezmieniona po wstawieniu?
Tak. Piksele źródłowe są zachowane, ale ostateczny wygląd zależy od tego, jak obraz jest skalowany na slajdzie oraz od ewentualnej kompresji przy zapisie.
Jaki jest najlepszy sposób, aby jednocześnie zamienić to samo logo na dziesiątkach slajdów?
Umieść logo na slajdzie mistrza lub układzie i zastąp je w kolekcji obrazów prezentacji — zmiany zostaną rozpowszechnione do wszystkich elementów korzystających z tego zasobu.
Czy wstawiony plik SVG można przekonwertować na edytowalne kształty?
Tak. Możesz przekonwertować SVG na grupę kształtów, po czym poszczególne części stają się edytowalne przy użyciu standardowych właściwości kształtów.
Jak mogę ustawić obraz jako tło kilku slajdów jednocześnie?
Ustaw obraz jako tło na slajdzie mistrza lub odpowiednim układzie — wszystkie slajdy korzystające z tego mistrza/układu odziedziczą tło.
Jak zapobiec „rozrostowi” prezentacji z powodu wielu obrazów?
Używaj jednego zasobu obrazu zamiast duplikatów, wybieraj rozsądne rozdzielczości, stosuj kompresję przy zapisie i umieszczaj powtarzające się grafiki w mistrzu, gdzie to ma sens.