Создание миниатюр фигур презентации на PHP
Введение
Aspose.Slides используется для создания файлов презентаций, где каждая страница является слайдом. Эти слайды можно просматривать, открывая файлы презентаций в Microsoft PowerPoint. Однако иногда разработчикам требуется просматривать изображения фигур отдельно в просмотрщике изображений. В таких случаях Aspose.Slides помогает создавать миниатюры изображений фигур слайда. Как использовать эту функцию, описано в этой статье.
В этой статье объясняется, как генерировать миниатюры слайдов разными способами:
- Создание миниатюры фигуры внутри слайда.
- Создание миниатюры фигуры для фигуры слайда с пользовательскими размерами.
- Создание миниатюры фигуры в границах внешнего вида фигуры.
Создание миниатюры фигуры из слайда
Чтобы создать миниатюру фигуры из любого слайда с помощью Aspose.Slides для PHP через Java, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры фигуры для указанного слайда с масштабом по умолчанию.
- Сохраните изображение миниатюры в выбранном вами формате изображения.
Этот пример кода показывает, как создать миниатюру фигуры из слайда:
# Создайте экземпляр класса Presentation, представляющего файл презентации
$pres = new Presentation("Thumbnail.pptx");
try {
# Создайте изображение в полном масштабе
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage();
# Сохраните изображение на диск в формате PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Создание миниатюры с пользовательским коэффициентом масштабирования
Чтобы создать миниатюру фигуры слайда с помощью Aspose.Slides для PHP через Java, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры фигуры для указанного слайда с пользовательскими размерами.
- Сохраните изображение миниатюры в выбранном вами формате изображения.
Этот пример кода показывает, как создать миниатюру фигуры на основе заданного коэффициента масштабирования:
# Создайте объект класса Presentation, представляющего файл презентации
$pres = new Presentation("Thumbnail.pptx");
try {
# Создайте изображение в полном масштабе
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage(ShapeThumbnailBounds->Shape, 1, 1);
# Сохраните изображение на диск в формате PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Создание миниатюры внешнего вида фигуры на основе границ
Этот метод создания миниатюр фигур позволяет разработчикам генерировать миниатюру в пределах границ внешнего вида фигуры. Он учитывает все эффекты фигуры. Сгенерированная миниатюра фигуры ограничена границами слайда. Чтобы создать миниатюру фигуры слайда в пределах её внешнего вида, выполните следующее:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры указанного слайда с границами фигуры в качестве внешнего вида.
- Сохраните изображение миниатюры в выбранном вами формате изображения.
Этот пример кода основан на описанных выше шагах:
# Создайте объект класса Presentation, представляющего файл презентации
$pres = new Presentation("Thumbnail.pptx");
try {
# Создайте изображение в полном масштабе
$slideImage = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0)->getImage(ShapeThumbnailBounds->Appearance, 1, 1);
# Сохраните изображение на диск в формате PNG
try {
$slideImage->save("output.png", ImageFormat::Png);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Получить фактические визуальные границы фигуры
Свойства рамки Shape — Shape::getX(), Shape::getY(), Shape::getWidth() и Shape::getHeight() — описывают прямоугольник, хранящийся в модели презентации. Содержимое, которое действительно отображается, может выходить за пределы этой рамки или занимать иной прямоугольник, выровненный по осям. Поворот, контуры, наконечники стрел, компоновка и переполнение текста, сгенерированная геометрия SmartArt и другие эффекты рендеринга могут изменить занимаемую область.
Используйте Shape::getVisualBounds, чтобы вычислить эту занимаемую область без создания изображения. Метод возвращает объект Rectangle2D.Float в координатах слайда. Возвращаемый прямоугольник не обрезается по границе слайда, поэтому его координаты могут быть отрицательными, когда содержимое выходит за пределы начала слайда.
Следующий пример получает и сравнивает рамку и визуальные границы:
$presentation = new Presentation("example.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
$visualBounds = $shape->getVisualBounds();
$frameX = $shape->getX();
$frameY = $shape->getY();
$frameWidth = $shape->getWidth();
$frameHeight = $shape->getHeight();
$visualX = $visualBounds->getX();
$visualY = $visualBounds->getY();
$visualWidth = $visualBounds->getWidth();
$visualHeight = $visualBounds->getHeight();
echo "Frame bounds (x, y, width, height): $frameX, $frameY, $frameWidth, $frameHeight\n";
echo "Visual bounds (x, y, width, height): $visualX, $visualY, $visualWidth, $visualHeight\n";
} finally {
$presentation->dispose();
}
Тот же Rectangle2D.Float можно использовать для выравнивания соседних фигур по их левой, правой, верхней или нижней границе; для резервирования достаточного пространства в сгенерированном макете; или для обнаружения содержимого за пределами разрешённого региона. Визуальные границы особенно полезны для SmartArt, текстовых полей, стрелок, изображений, повернутых фигур и групповых фигур, где сохранённая рамка может не отражать полного результата рендеринга.
Используйте Shape::getVisualBounds, когда нужны координаты для компоновки или проверки и bitmap не требуется. Используйте Shape::getImage, когда необходимо отобразить фигуру. С помощью ShapeThumbnailBounds ShapeThumbnailBounds::Shape задаёт размер изображения по границам фигуры, включая настройки контура, тогда как ShapeThumbnailBounds::Appearance задаёт размер по внешнему виду фигуры и ограничивает результат границами слайда. В отличие от этого, Shape::getVisualBounds возвращает только вычисленный прямоугольник и не обрезает его по слайду.
FAQ
Какие форматы изображений можно использовать при сохранении миниатюр фигур?
PNG, JPEG, BMP, GIF, TIFF, и другие. Фигуры также могут быть экспортированы как векторный SVG путем сохранения содержимого фигуры в формате SVG.
В чем разница между границами Shape и Appearance при рендеринге миниатюры?
Shape использует геометрию фигуры; Appearance учитывает визуальные эффекты (тени, свечения и т.д.).
Что происходит, если фигура помечена как скрытая? Будет ли она всё равно отображаться как миниатюра?
Скрытая фигура остаётся частью модели и может быть отрисована; флаг скрытия влияет на отображение в режиме слайд‑шоу, но не препятствует созданию изображения фигуры.
Поддерживаются ли групповые фигуры, диаграммы, SmartArt и другие сложные объекты?
Да. Любой объект, представленный как Shape (включая GroupShape, Chart и SmartArt), может быть сохранён в виде миниатюры или SVG.
Влияют ли системные шрифты, установленные в системе, на качество миниатюр текстовых фигур?
Да. Вам следует предоставить необходимые шрифты (или настроить замену шрифтов), чтобы избежать нежелательных замен и перелома текста.