Оптимизация управления изображениями в презентациях с использованием PHP
Изображения в слайдах презентаций
Изображения делают презентации более увлекательными и интересными. В Microsoft PowerPoint вы можете вставлять изображения из файла, интернета или других мест на слайды. Аналогично, Aspose.Slides позволяет добавлять изображения на слайды в ваших презентациях разными способами.
Tip
Aspose предоставляет бесплатные конвертеры —JPEG to PowerPoint и PNG to PowerPoint, позволяющие быстро создавать презентации из изображений.Info
Если вы хотите добавить изображение как объект кадра — особенно если планируете использовать стандартные параметры форматирования для изменения его размера, добавления эффектов и т.д. — см. Picture Frame.Note
Вы можете выполнять операции ввода/вывода с изображениями и презентациями PowerPoint для конвертации изображения из одного формата в другой. См. эти страницы: конвертировать image to JPG; конвертировать JPG to image; конвертировать JPG to PNG, конвертировать PNG to JPG; конвертировать PNG to SVG, конвертировать SVG to PNG.Aspose.Slides поддерживает операции с изображениями в популярных форматах: JPEG, PNG, GIF и других.
Добавление локальных изображений на слайды
Вы можете добавить одно или несколько изображений с вашего компьютера на слайд в презентации. Этот пример кода показывает, как добавить изображение на слайд:
$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();
}
}
Добавление изображений из интернета на слайды
Если изображение, которое вы хотите добавить на слайд, недоступно на вашем компьютере, вы можете добавить его напрямую из интернета.
Этот пример кода показывает, как добавить изображение из интернета на слайд:
$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();
}
}
Добавление изображений в мастер‑слайд
Мастер‑слайд — это верхний слайд, который хранит и управляет информацией (тема, макет и т.п.) о всех слайдах под ним. Поэтому, когда вы добавляете изображение в мастер‑слайд, это изображение появляется на каждом слайде, использующем данный мастер‑слайд.
Этот пример кода Java показывает, как добавить изображение в мастер‑слайд:
$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();
}
}
Добавление изображений в качестве фона слайдов
Вы можете решить использовать изображение в качестве фона для конкретного слайда или нескольких слайдов. В этом случае см. Setting Images as Backgrounds for Slides.
Добавление SVG в презентации
Вы можете добавить или вставить любое изображение в презентацию, используя метод addPictureFrame интерфейса IShapeCollection.
Чтобы создать объект изображения на основе SVG, можно выполнить следующие действия:
- Создайте объект SvgImage для вставки в ImageShapeCollection
- Создайте объект PPImage из ISvgImage
- Создайте объект PictureFrame, используя интерфейс IPPImage
Этот пример кода показывает, как реализовать описанные шаги для добавления SVG‑изображения в презентацию:
# Создать экземпляр класса Presentation, представляющего файл 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();
}
}
Конвертация SVG в набор фигур
Конвертация SVG в набор фигур в Aspose.Slides аналогична функции PowerPoint, используемой для работы с SVG‑изображениями:

Функциональность предоставляется одной из перегрузок метода addGroupShape интерфейса IShapeCollection, который принимает объект ISvgImage в качестве первого аргумента.
Этот пример кода показывает, как использовать описанный метод для конвертации SVG‑файла в набор фигур:
# Создать новую презентацию
$presentation = new Presentation();
try {
# Прочитать содержимое 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;
# Создать объект SvgImage
$svgImage = new SvgImage($svgContent);
# Получить размеры слайда
$slideSize = $presentation->getSlideSize()->getSize();
# Преобразовать SVG-изображение в группу фигур, масштабируя его до размеров слайда
$presentation->getSlides()->get_Item(0)->getShapes()->addGroupShape($svgImage, 0.0, 0.0, $slideSize->getWidth(), $slideSize->getHeight());
# Сохранить презентацию в формате PPTX
$presentation->save("output.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
Добавление изображений в формате EMF на слайды
Aspose.Slides for PHP via Java позволяет генерировать EMF‑изображения из листов Excel и добавлять их в слайды как EMF с помощью Aspose.Cells.
Этот пример кода показывает, как выполнить описанную задачу:
$book = new Workbook("chart.xlsx");
$sheet = $book->getWorksheets()->get(0);
$options = new ImageOrPrintOptions();
$options->setHorizontalResolution(200);
$options->setVerticalResolution(200);
$options->setImageType(ImageType::EMF);
# Сохранить книгу в поток
$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();
}
}
Замена изображений в коллекции изображений
Aspose.Slides позволяет заменять изображения, хранящиеся в коллекции изображений презентации (включая те, что используются формами слайдов). В этом разделе показаны несколько подходов к обновлению изображений в коллекции. API предоставляет простые методы замены изображения с помощью необработанных байтов, экземпляра IImage или другого изображения, уже находящегося в коллекции.
Следуйте приведённым ниже шагам:
- Загрузите файл презентации, содержащий изображения, используя класс Presentation.
- Загрузите новое изображение из файла в массив байтов.
- Замените целевое изображение новым изображением, используя массив байтов.
- Во втором подходе загрузите изображение в объект IImage и замените целевое изображение этим объектом.
- В третьем подходе замените целевое изображение изображением, уже существующим в коллекции изображений презентации.
- Сохраните изменённую презентацию в файл PPTX.
// Создать экземпляр класса Presentation, представляющего файл презентации.
$presentation = new Presentation("sample.pptx");
try {
// Первый способ.
$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);
// Второй способ.
$newImage = Images::fromFile("image1.png");
$oldImage = $presentation->getImages()->get_Item(1);
$oldImage->replaceImage($newImage);
$newImage->dispose();
// Третий способ.
$oldImage = $presentation->getImages()->get_Item(2);
$oldImage->replaceImage($presentation->getImages()->get_Item(3));
// Сохранить презентацию в файл.
$presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Info
С помощью бесплатного конвертера Aspose FREE Text to GIF вы легко анимируете текст, создаёте GIF‑изображения из текста и т.д.FAQ
Сохраняется ли исходное разрешение изображения после вставки?
Да. Исходные пиксели сохраняются, но окончательный вид зависит от того, как picture масштабируется на слайде и от любой сжатой при сохранении.
Какой лучший способ заменить один и тот же логотип на десятках слайдов одновременно?
Разместите логотип на мастер‑слайде или в макете и замените его в коллекции изображений презентации — изменения будут распространены на все элементы, использующие этот ресурс.
Можно ли преобразовать вставленный SVG в редактируемые фигуры?
Да. Вы можете конвертировать SVG в группу фигур, после чего отдельные части становятся редактируемыми с помощью стандартных свойств фигур.
Как установить изображение в качестве фона для нескольких слайдов одновременно?
Назначьте изображение в качестве фона на мастер‑слайде или соответствующем макете — все слайды, использующие этот мастер/макет, унаследуют фон.
Как избежать «разрастания» размеров презентации из‑за большого количества изображений?
Повторно используйте один ресурс изображения вместо дубликатов, выбирайте разумные разрешения, применяйте сжатие при сохранении и помещайте повторяющуюся графику в мастер, где это уместно.