Создание миниатюр фигур презентации в .NET
Введение
Aspose.Slides for .NET используется для создания файлов презентаций, где каждая страница является слайдом. Эти слайды можно просматривать, открыв файлы презентаций в Microsoft PowerPoint. Но иногда разработчикам может потребоваться просмотреть изображения фигур отдельно в просмотрщике изображений. В таких случаях Aspose.Slides for .NET помогает генерировать миниатюры фигур слайдов. Как использовать эту возможность, описано в этой статье.
Эта статья объясняет, как создавать миниатюры слайдов различными способами:
- Создание миниатюры фигуры внутри слайда.
- Создание миниатюры фигуры для формы слайда с пользовательскими размерами.
- Создание миниатюры фигуры в границах отображения фигуры.
Создание миниатюры фигуры из слайда
Для создания миниатюры фигуры из любого слайда с помощью Aspose.Slides for .NET:
- Создайте экземпляр класса Presentation.
- Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры фигуры указанного слайда в масштабе по умолчанию.
- Сохраните изображение миниатюры в любом требуемом графическом формате.
Пример ниже создает миниатюру фигуры.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage())
{
image.Save("Shape_thumbnail_out.png", ImageFormat.Png);
}
}
Создание миниатюры с пользовательским коэффициентом масштабирования
Для создания миниатюры фигуры любого элемента слайда с помощью Aspose.Slides for .NET:
- Создайте экземпляр класса
Presentation. - Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры указанного слайда с границами фигуры.
- Сохраните изображение миниатюры в любом требуемом графическом формате.
В примере ниже создаётся миниатюра с пользовательским коэффициентом масштабирования.
ShapeThumbnailBounds bounds = ShapeThumbnailBounds.Shape;
float scale = 1; // Масштабирование по осям X и Y.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage(bounds, scale, scale))
{
image.Save("Scaling Factor Thumbnail_out.png", ImageFormat.Png);
}
}
Создание миниатюры формы на основе границ отображения
Этот метод создания миниатюр фигур позволяет разработчикам генерировать миниатюру в границах отображения фигуры. Он учитывает все эффекты фигуры. Сгенерированная миниатюра ограничена границами слайда. Чтобы создать миниатюру любой фигуры слайда в границах её отображения, используйте следующий пример кода:
- Создайте экземпляр класса
Presentation. - Получите ссылку на любой слайд, используя его ID или индекс.
- Получите изображение миниатюры указанного слайда с границами фигуры как отображение.
- Сохраните изображение миниатюры в любом требуемом графическом формате.
В примере ниже создаётся миниатюра с пользовательским коэффициентом масштабирования.
ShapeThumbnailBounds bounds = ShapeThumbnailBounds.Appearance;
float scale = 1; // Масштабирование по осям X и Y.
using (Presentation presentation = new Presentation("HelloWorld.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
using (IImage image = shape.GetImage(bounds, scale, scale))
{
image.Save("Shape_thumbnail_Bound_Shape_out.png", ImageFormat.Png);
}
}
Получение фактических визуальных границ фигуры
Свойства кадра IShape — его X, Y, Width и Height — описивают прямоугольник, хранящийся в модели презентации. Содержимое, которое фактически отрисовывается, может выходить за пределы этого кадра или занимать иной прямоугольник, выровненный по осям. Поворот, обводки, концы стрелок, компоновка и переполнение текста, генерируемая геометрия SmartArt и другие эффекты рендеринга могут менять занимаемую площадь.
Используйте GetVisualBounds для расчёта этой площади без создания изображения. Метод возвращает объект RectangleF в координатах слайда. Возвращённый прямоугольник не обрезается по границе слайда, поэтому его координаты могут быть отрицательными, если содержимое выходит за начало слайда.
GetVisualBounds в настоящее время не объявлен в интерфейсе IShape. Поэтому храните полученную из коллекции фигур слайда фигуру как значение интерфейса и приводите тип только при вызове метода.
Следующий пример получает и сравнивает границы кадра и визуальные границы:
using var presentation = new Presentation("example.pptx");
var slide = presentation.Slides[0];
IShape shape = slide.Shapes[0];
var visualBounds = ((Shape)shape).GetVisualBounds();
var frameBounds = new RectangleF(shape.X, shape.Y, shape.Width, shape.Height);
Console.WriteLine($"Frame bounds: {frameBounds}");
Console.WriteLine($"Visual bounds: {visualBounds}");
Тот же RectangleF можно использовать для выравнивания соседних фигур по её левому, правому, верхнему или нижнему краю; для резервирования достаточно места в сгенерированном макете; либо для обнаружения содержимого за пределами разрешённой области. Визуальные границы особенно полезны для SmartArt, текстовых полей, стрелок, изображений, повернутых фигур и составных фигур, где сохранённый кадр может не отражать полностью отрисованный результат.
Используйте GetVisualBounds, когда нужны координаты для компоновки или проверки и не требуется bitmap. Используйте IShape.GetImage, когда необходимо отрисовать фигуру. С помощью ShapeThumbnailBounds ShapeThumbnailBounds.Shape задаёт размер изображения из границ фигуры, включая настройки обводки, тогда как ShapeThumbnailBounds.Appearance задаёт размер из отображения фигуры и ограничивает результат границами слайда. В отличие от этого, GetVisualBounds возвращает только рассчитанный прямоугольник и не обрезает его по границе слайда.
Часто задаваемые вопросы
Какие форматы изображений можно использовать при сохранении миниатюр фигур?
PNG, JPEG, BMP, GIF, TIFF, и другие. Фигуры также могут быть exported as vector SVG путём сохранения их содержимого в формате SVG.
В чём разница между границами Shape и Appearance при рендеринге миниатюры?
Shape использует геометрию фигуры; Appearance учитывает visual effects (тени, свечения и т.д.).
Что произойдёт, если фигура помечена как скрытая? Будет ли она всё равно отрисована как миниатюра?
Скрытая фигура остаётся частью модели и может быть отрисована; флаг скрытия влияет только на отображение в режиме слайд‑шоу и не препятствует созданию изображения фигуры.
Поддерживаются ли составные фигуры, диаграммы, SmartArt и другие сложные объекты?
Да. Любой объект, представленный как Shape (включая GroupShape, Chart, и SmartArt), может быть сохранён в виде миниатюры или в формате SVG.
Влияют ли системные шрифты, установленные в ОС, на качество миниатюр текстовых фигур?
Да. Необходимо provide the required fonts (или configure font substitutions), чтобы избежать нежелательных замен и переполнения текста.