Управление рамками изображений в презентациях на Android
Рамка изображения — это фигура, содержащая изображение, — она похожа на картину в рамке.
Вы можете добавить изображение на слайд через рамку изображения. Таким образом, вы можете форматировать изображение, форматируя рамку изображения.
Tip
Aspose предоставляет бесплатные конвертеры—JPEG to PowerPoint и PNG to PowerPoint—которые позволяют быстро создавать презентации из изображений.Create a Picture Frame
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Создайте объект IPPImage путем добавления изображения в IImagescollection, связанный с объектом презентации, который будет использоваться для заполнения фигуры.
- Укажите ширину и высоту изображения.
- Создайте PictureFrame на основе ширины и высоты изображения с помощью метода
AddPictureFrame, предоставленного объектом фигуры, связанным с указанным слайдом. - Добавьте рамку изображения (содержащую картинку) на слайд.
- Запишите изменённую презентацию в файл PPTX.
Этот Java‑код показывает, как создать рамку изображения:
// Создает экземпляр класса Presentation, который представляет файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Создает экземпляр класса Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Добавляет рамку изображения с высотой и шириной, соответствующей Picture
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Записывает файл PPTX на диск
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Create a Picture Frame with Relative Scale
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте изображение в коллекцию изображений презентации.
- Создайте объект IPPImage путем добавления изображения в IImagescollection, связанный с объектом презентации, который будет использоваться для заполнения фигуры.
- Укажите относительную ширину и высоту изображения в рамке изображения.
- Запишите изменённую презентацию в файл PPTX.
Этот Java‑код показывает, как создать рамку изображения с относительным масштабом:
// Создает экземпляр класса Presentation, который представляет файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Создает экземпляр класса Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Добавляет рамку изображения с высотой и шириной, соответствующей картинке
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Устанавливает относительные масштабы ширины и высоты
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// Записывает файл PPTX на диск
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Extract Raster Images from Picture Frames
Вы можете извлекать растровые изображения из объектов PictureFrame и сохранять их в PNG, JPG и других форматах. Пример кода ниже демонстрирует, как извлечь изображение из документа “sample.pptx” и сохранить его в формате PNG.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
IShape firstShape = firstSlide.getShapes().get_Item(0);
if (firstShape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) firstShape;
try {
IImage slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
slideImage.save("slide_1_shape_1.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
}
} catch (IOException e) {
} finally {
presentation.dispose();
}
Extract SVG Images from Picture Frames
Когда презентация содержит графику SVG, размещённую внутри фигур PictureFrame, Aspose.Slides для Android через Java позволяет получить оригинальные векторные изображения с полным сохранением качества. Просматривая коллекцию фигур слайда, вы можете определить каждый PictureFrame, проверить, содержит ли базовый IPPImage SVG‑контент, и затем сохранить это изображение на диск или в поток в его нативном формате SVG.
Следующий пример кода демонстрирует, как извлечь SVG‑изображение из рамки изображения:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) shape;
ISvgImage svgImage = pictureFrame.getPictureFormat().getPicture().getImage().getSvgImage();
FileOutputStream fos = new FileOutputStream("output.svg");
fos.write(svgImage.getSvgData());
fos.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
presentation.dispose();
}
Get Transparency of an Image
Aspose.Slides позволяет получить эффект прозрачности, применённый к изображению. Этот Java‑код демонстрирует операцию:
Presentation presentation = new Presentation("Test.pptx");
var pictureFrame = (IPictureFrame) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var effect : imageTransform) {
if (effect instanceof IAlphaModulateFixed) {
var alphaModulateFixed = (IAlphaModulateFixed) effect;
var transparencyValue = 100 - alphaModulateFixed.getAmount();
System.out.println("Picture transparency: " + transparencyValue);
}
}
Picture Frame Formatting
Aspose.Slides предоставляет множество параметров форматирования, которые можно применить к рамке изображения. Используя эти параметры, вы можете изменить рамку изображения, чтобы она соответствовала определённым требованиям.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Создайте объект IPPImage путем добавления изображения в IImagescollection, связанный с объектом презентации, который будет использоваться для заполнения фигуры.
- Укажите ширину и высоту изображения.
- Создайте
PictureFrameна основе ширины и высоты изображения с помощью метода AddPictureFrame , предоставленного объектом IShapes , связанным с указанным слайдом. - Добавьте рамку изображения (содержащую картинку) на слайд.
- Установите цвет линии рамки изображения.
- Установите ширину линии рамки изображения.
- Поверните рамку изображения, задав ей положительное или отрицательное значение.
- Положительное значение вращает изображение по часовой стрелке.
- Отрицательное значение вращает изображение против часовой стрелки.
- Добавьте рамку изображения (содержащую картинку) на слайд.
- Запишите изменённую презентацию в файл PPTX.
Этот Java‑код демонстрирует процесс форматирования рамки изображения:
// Создает экземпляр класса Presentation, который представляет файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide sld = pres.getSlides().get_Item(0);
// Создает экземпляр класса Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Добавляет рамку изображения с высотой и шириной, соответствующей изображению
IPPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Применяет некоторое форматирование к PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Записывает файл PPTX на диск
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tip
Aspose недавно разработала бесплатный Collage Maker. Если вам понадобится объединить JPG/JPEG или PNG‑изображения, создать сетку из фотографий, вы можете воспользоваться этим сервисом.Add an Image as a Link
Чтобы избежать большого размера презентаций, вы можете добавлять изображения (или видео) через ссылки вместо встраивания файлов напрямую в презентацию. Этот Java‑код показывает, как добавить изображение и видео в заполнитель:
Presentation presentation = new Presentation("input.pptx");
try {
ArrayList<IShape> shapesToRemove = new ArrayList<IShape>();
int shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
for (int i = 0; i < shapesCount; i++)
{
IShape autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
if (autoShape.getPlaceholder() == null)
{
continue;
}
switch (autoShape.getPlaceholder().getType())
{
case PlaceholderType.Picture:
IPictureFrame pictureFrame = presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle,
autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), null);
pictureFrame.getPictureFormat().getPicture().setLinkPathLong(
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
shapesToRemove.add(autoShape);
break;
case PlaceholderType.Media:
IVideoFrame videoFrame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(
autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), "");
videoFrame.getPictureFormat().getPicture().setLinkPathLong(
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
videoFrame.setLinkPathLong("https://youtu.be/t_1LYZ102RA");
shapesToRemove.add(autoShape);
break;
}
}
for (IShape shape : shapesToRemove)
{
presentation.getSlides().get_Item(0).getShapes().remove(shape);
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
Crop Images
Этот Java‑код показывает, как обрезать существующее изображение на слайде:
Presentation pres = new Presentation();
// Создает новый объект изображения
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Добавляет PictureFrame на слайд
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Обрезает изображение (значения в процентах)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Сохраняет результат
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Delete Cropped Areas of a Picture
Если вы хотите удалить обрезанные области изображения, содержащегося в рамке, вы можете использовать метод deletePictureCroppedAreas() . Этот метод возвращает обрезанное изображение или оригинальное изображение, если обрезка не требуется.
Этот Java‑код демонстрирует операцию:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Получает PictureFrame с первого слайда
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Удаляет обрезанные области изображения PictureFrame и возвращает обрезанное изображение
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Сохраняет результат
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
NOTE
Метод deletePictureCroppedAreas() добавляет обрезанное изображение в коллекцию изображений презентации. Если изображение используется только в обработанном PictureFrame, такая настройка может уменьшить размер презентации. В противном случае количество изображений в полученной презентации увеличится.
Этот метод преобразует метафайлы WMF/EMF в растровое PNG‑изображение во время операции обрезки.
Lock Aspect Ratio
Если вы хотите, чтобы фигура, содержащая изображение, сохраняла своё соотношение сторон даже после изменения размеров изображения, вы можете использовать метод setAspectRatioLocked для установки параметра Lock Aspect Ratio .
Этот Java‑код показывает, как заблокировать соотношение сторон фигуры:
Presentation pres = new Presentation("pres.pptx");
try {
ILayoutSlide layout = pres.getLayoutSlides().getByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.getSlides().addEmptySlide(layout);
IPPImage picture;
IImage image = Images.fromFile("image.png");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
IPictureFrame pictureFrame = emptySlide.getShapes().addPictureFrame(
ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
// установить форму так, чтобы сохранялось соотношение сторон при изменении размеров
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
NOTE
Этот параметр Lock Aspect Ratio сохраняет только соотношение сторон фигуры, а не изображения, которое она содержит.Use the StretchOff Property
Используя свойства StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight и StretchOffsetBottom интерфейса IPictureFillFormat и класса PictureFillFormat, вы можете задать прямоугольник заполнения.
Когда для изображения указано растягивание, исходный прямоугольник масштабируется до указанного прямоугольника заполнения. Каждая граница прямоугольника заполнения определяется процентным смещением от соответствующей границы ограничивающего прямоугольника фигуры. Положительный процент задаёт отступ внутрь, отрицательный — отступ наружу.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте прямоугольник
AutoShape. - Создайте изображение.
- Установите тип заливки фигуры.
- Установите режим заливки изображения фигуры.
- Добавьте изображение для заполнения фигуры.
- Укажите смещения изображения от соответствующей границы ограничивающего прямоугольника фигуры
- Запишите изменённую презентацию в файл PPTX.
Этот Java‑код демонстрирует процесс, в котором используется свойство StretchOff:
// Создает экземпляр класса Prseetation, представляющего файл PPTX
Presentation pres = new Presentation();
try {
// Получает первый слайд
ISlide slide = pres.getSlides().get_Item(0);
// Создает экземпляр класса ImageEx
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Добавляет AutoShape типа Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Устанавливает тип заливки фигуры
aShape.getFillFormat().setFillType(FillType.Picture);
// Устанавливает режим заливки изображения фигуры
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Устанавливает изображение для заполнения фигуры
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Задает смещения изображения от соответствующей границы ограничивающего прямоугольника фигуры
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
// Записывает файл PPTX на диск
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Как я могу узнать, какие форматы изображений поддерживаются для PictureFrame?
Aspose.Slides поддерживает как растровые изображения (PNG, JPEG, BMP, GIF и т.д.), так и векторные (например, SVG) через объект изображения, присваиваемый PictureFrame. Список поддерживаемых форматов в общем совпадает с возможностями движка конвертации слайдов и изображений.
Как добавление десятков больших изображений повлияет на размер и производительность PPTX?
Встраивание больших изображений увеличивает размер файла и потребление памяти; добавление изображений через ссылки помогает уменьшить размер презентации, но требует доступности внешних файлов. Aspose.Slides предоставляет возможность добавлять изображения по ссылке для сокращения размера файла.
Как можно заблокировать объект изображения от случайного перемещения/изменения размеров?
Используйте shape locks для PictureFrame. (например, отключить перемещение или изменение размеров). Механизм блокировки описан для фигур в отдельной статье о защите и поддерживается для различных типов фигур, включая PictureFrame.
Сохраняется ли векторное качество SVG при экспорте презентации в PDF/изображения?
Aspose.Slides позволяет извлекать SVG из PictureFrame в виде оригинального вектора. При экспорте в PDF или растровые форматы результат может быть растровым в зависимости от настроек экспорта; тот факт, что оригинальный SVG хранится как вектор, подтверждается поведением извлечения.