Управление рамками изображений в презентациях с помощью JavaScript
Рамка изображения — это форма, содержащая изображение, почти как картина в рамке.
Вы можете добавить изображение на слайд через рамку изображения. Таким образом, вы форматируете изображение, форматируя рамку изображения.
Подсказка
Aspose предоставляет бесплатные конвертеры — JPEG в PowerPoint и PNG в PowerPoint — которые позволяют быстро создавать презентации из изображений.Создать рамку изображения
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Создайте объект
PPImage, добавив изображение в ImagesCollection, связанный с объектом презентации, который будет использоваться для заполнения формы. - Укажите ширину и высоту изображения.
- Создайте PictureFrame на основе ширины и высоты изображения через метод
addPictureFrame, предоставляемый объектом формы, связанным с указанным слайдом. - Добавьте рамку изображения (содержащую картинку) на слайд.
- Запишите изменённую презентацию в файл PPTX.
Этот код JavaScript показывает, как создать рамку изображения:
// Создает экземпляр класса Presentation, представляющего файл PPTX
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд
var sld = pres.getSlides().get_Item(0);
// Создает экземпляр класса Image
var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
// Добавляет рамку изображения с эквивалентной высотой и шириной изображения
sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Сохраняет файл PPTX на диск
pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Рамки изображения позволяют быстро создавать слайды презентаций на основе изображений. Комбинируя рамку изображения с параметрами сохранения Aspose.Slides, вы можете управлять операциями ввода/вывода для преобразования изображений из одного формата в другой.
Создать рамку изображения с относительным масштабом
Изменяя относительный масштаб изображения, можно создать более сложную рамку изображения.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте изображение в коллекцию изображений презентации.
- Создайте объект PPImage, добавив изображение в ImagesCollection, связанный с объектом презентации, который будет использоваться для заполнения формы.
- Укажите относительную ширину и высоту изображения в рамке.
- Запишите изменённую презентацию в файл PPTX.
Этот код JavaScript показывает, как создать рамку изображения с относительным масштабом:
// Создать класс Presentation, представляющий PPTX
var pres = new aspose.slides.Presentation();
try {
// Получить первый слайд
var sld = pres.getSlides().get_Item(0);
// Создать экземпляр класса Image
var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
// Добавить рамку изображения с высотой и шириной, эквивалентными изображению
var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Установка относительного масштаба ширины и высоты
pf.setRelativeScaleHeight(0.8);
pf.setRelativeScaleWidth(1.35);
// Сохранить файл PPTX на диск
pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Извлечь растровые изображения из рамок
Вы можете извлекать растровые изображения из объектов PictureFrame и сохранять их в форматах PNG, JPG и других. Пример кода ниже демонстрирует, как извлечь изображение из документа «sample.pptx» и сохранить его в формате PNG.
var presentation = new aspose.slides.Presentation("sample.pptx");
try {
var firstSlide = presentation.getSlides().get_Item(0);
var firstShape = firstSlide.getShapes().get_Item(0);
if (java.instanceOf(firstShape, "com.aspose.slides.IPictureFrame")) {
var pictureFrame = firstShape;
try {
var slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
slideImage.save("slide_1_shape_1.png", aspose.slides.ImageFormat.Png);
} finally {
if (slideImage != null) {
slideImage.dispose();
}
}
}
} catch (e) {console.log(e);
} finally {
presentation.dispose();
}
Извлечь SVG‑изображения из рамок
Когда презентация содержит SVG‑графику, размещённую внутри фигур PictureFrame, Aspose.Slides for Node.js via Java позволяет получить оригинальные векторные изображения с полной точностью. Перебирая коллекцию фигур слайда, вы можете определить каждый PictureFrame, проверить, содержит ли нижележащий PPImage SVG‑контент, и затем сохранить это изображение на диск или в поток в его нативном SVG‑формате.
Следующий пример кода демонстрирует, как извлечь SVG‑изображение из рамки:
var presentation = new aspose.slides.Presentation("sample.pptx");
try {
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
const svgImage = shape.getPictureFormat().getPicture().getImage().getSvgImage();
if (svgImage) {
fs.writeFileSync("output.svg", svgImage.getSvgData());
}
}
} catch (e) {
console.log(e);
} finally {
presentation.dispose();
}
Получить прозрачность изображения
Aspose.Slides позволяет получить эффект прозрачности, применённый к изображению. Этот код JavaScript демонстрирует операцию:
var presentation = new aspose.slides.Presentation("Test.pptx");
var pictureFrame = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var i = 0; i < imageTransform.size(); i++) {
var effect = imageTransform.get_Item(i);
if (java.instanceOf(effect, "com.aspose.slides.IAlphaModulateFixed")) {
var alphaModulateFixed = effect;
var transparencyValue = 100 - alphaModulateFixed.getAmount();
console.log("Picture transparency: " + transparencyValue);
}
}
Форматирование рамки изображения
Aspose.Slides предоставляет множество параметров форматирования, которые можно применить к рамке изображения. С их помощью вы можете изменить рамку, чтобы она соответствовала конкретным требованиям.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Создайте объект PPImage, добавив изображение в ImagesCollection, связанный с объектом презентации, который будет использоваться для заполнения формы.
- Укажите ширину и высоту изображения.
- Создайте
PictureFrameна основе ширины и высоты изображения через метод addPictureFrame объекта Shapes, связанного с указанным слайдом. - Добавьте рамку изображения (содержащую картинку) на слайд.
- Установите цвет линии рамки изображения.
- Установите ширину линии рамки изображения.
- Поверните рамку изображения, задав ей положительное или отрицательное значение.
- Положительное значение вращает изображение по часовой стрелке.
- Отрицательное значение вращает изображение против часовой стрелки.
- Добавьте рамку изображения (содержащую картинку) на слайд.
- Запишите изменённую презентацию в файл PPTX.
Этот код JavaScript демонстрирует процесс форматирования рамки изображения:
// Создаёт экземпляр класса Presentation, представляющего файл PPTX
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд
var sld = pres.getSlides().get_Item(0);
// Создаёт экземпляр класса Image
var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
// Добавляет рамку изображения с высотой и шириной, эквивалентными изображению
var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Применяет некоторое форматирование к PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLUE"));
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Записывает файл PPTX на диск
pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Подсказка
Aspose недавно разработал бесплатный Collage Maker. Если вам нужно объединить JPG/JPEG или PNG‑изображения, создать сетку из фотографий, вы можете воспользоваться этим сервисом.Добавить изображение как ссылку
Чтобы избежать большого размера презентаций, вы можете добавлять изображения (или видео) через ссылки вместо встраивания файлов непосредственно в презентацию. Этот код JavaScript показывает, как добавить изображение и видео в заполнитель:
var presentation = new aspose.slides.Presentation("input.pptx");
try {
var shapesToRemove = java.newInstanceSync("java.util.ArrayList");
var shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
for (var i = 0; i < shapesCount; i++) {
var autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
if (autoShape.getPlaceholder() == null) {
continue;
}
switch (autoShape.getPlaceholder().getType()) {
case aspose.slides.PlaceholderType.Picture :
var pictureFrame = presentation.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.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 aspose.slides.PlaceholderType.Media :
var 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 (var i = 0; i < shapesToRemove.length; i++) {
var shape = shapesToRemove.get_Item(i);
presentation.getSlides().get_Item(0).getShapes().remove(shape);
}
presentation.save("output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (presentation != null) {
presentation.dispose();
}
}
Обрезать изображение
Этот код JavaScript показывает, как обрезать существующее изображение на слайде:
var pres = new aspose.slides.Presentation();
// Создаёт новый объект изображения
try {
var picture;
var image = aspose.slides.Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) {
image.dispose();
}
}
// Добавляет PictureFrame на слайд
var picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Обрезает изображение (значения в процентах)
picFrame.getPictureFormat().setCropLeft(23.6);
picFrame.getPictureFormat().setCropRight(21.5);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Сохраняет результат
pres.save(outPptxFile, aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Удалить обрезанные области рисунка
Если необходимо удалить обрезанные области изображения, содержащегося в рамке, используйте метод deletePictureCroppedAreas(). Метод возвращает обрезанное изображение или оригинальное, если обрезка не требуется.
Этот код JavaScript демонстрирует операцию:
var presentation = new aspose.slides.Presentation("PictureFrameCrop.pptx");
try {
var slide = presentation.getSlides().get_Item(0);
// Получает PictureFrame с первого слайда
var picFrame = slide.getShapes().get_Item(0);
// Удаляет обрезанные области изображения PictureFrame и возвращает обрезанное изображение
var croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Сохраняет результат
presentation.save("PictureFrameDeleteCroppedAreas.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (presentation != null) {
presentation.dispose();
}
}
ПРИМЕЧАНИЕ
Метод deletePictureCroppedAreas() добавляет обрезанное изображение в коллекцию изображений презентации. Если изображение используется только в обработанном PictureFrame, такая настройка может уменьшить размер презентации. В противном случае количество изображений в результирующей презентации увеличится.
Метод преобразует метафайлы WMF/EMF в растровое PNG‑изображение во время операции обрезки.
Блокировать соотношение сторон
Если необходимо, чтобы форма, содержащая изображение, сохраняла своё соотношение сторон после изменения размеров изображения, используйте метод setAspectRatioLocked для установки параметра Lock Aspect Ratio.
Этот код JavaScript показывает, как заблокировать соотношение сторон формы:
var pres = new aspose.slides.Presentation("pres.pptx");
try {
var layout = pres.getLayoutSlides().getByType(aspose.slides.SlideLayoutType.Custom);
var emptySlide = pres.getSlides().addEmptySlide(layout);
var picture;
var image = aspose.slides.Images.fromFile("image.png");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) {
image.dispose();
}
}
var pictureFrame = emptySlide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
// установить форму для сохранения соотношения сторон при изменении размера
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
ПРИМЕЧАНИЕ
Данный параметр Lock Aspect Ratio сохраняет только соотношение сторон формы, а не изображения, которое она содержит.Использовать свойство StretchOff
С помощью методов setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight и setStretchOffsetBottom класса PictureFillFormat вы можете задать прямоугольник заполнения.
При указании растягивания для изображения исходный прямоугольник масштабируется до размеров заданного прямоугольника заполнения. Каждая грань прямоугольника заполнения определяется процентным смещением от соответствующей грани ограничивающего прямоугольника формы. Положительный процент задаёт внутренний отступ, отрицательный — наружный отступ.
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд по его индексу.
- Добавьте прямоугольник
AutoShape. - Создайте изображение.
- Установите тип заполнения формы.
- Установите режим заполнения формы изображением.
- Добавьте изображение для заполнения формы.
- Задайте смещения изображения от соответствующей грани ограничивающего прямоугольника формы.
- Запишите изменённую презентацию в файл PPTX.
Этот код JavaScript демонстрирует процесс использования свойства StretchOff:
// Создаёт экземпляр класса Presentation, представляющего файл PPTX
var pres = new aspose.slides.Presentation();
try {
// Получает первый слайд
var slide = pres.getSlides().get_Item(0);
// Создаёт экземпляр класса ImageEx
var picture;
var image = aspose.slides.Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) {
image.dispose();
}
}
// Добавляет AutoShape типа Rectangle
var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
// Устанавливает тип заполнения фигуры
aShape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Picture));
// Устанавливает режим заполнения фигурой изображением
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(aspose.slides.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", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
FAQ
Как узнать, какие форматы изображений поддерживаются для PictureFrame?
Aspose.Slides поддерживает как растровые изображения (PNG, JPEG, BMP, GIF и т.д.), так и векторные (например, SVG) через объект изображения, назначенный PictureFrame. Список поддерживаемых форматов обычно перекрывается возможностями движка конвертации слайдов и изображений.
Как добавление десятков больших изображений повлияет на размер PPTX и производительность?
Встраивание больших изображений увеличивает размер файла и потребление памяти; использование ссылок на изображения помогает уменьшить размер презентации, но требует доступности внешних файлов. Aspose.Slides предоставляет возможность добавлять изображения по ссылке для снижения размера файла.
Как заблокировать объект изображения от случайного перемещения/изменения размеров?
Используйте блокировки формы для PictureFrame (например, отключить перемещение или изменение размеров). Механизм блокировки поддерживается для различных типов фигур, включая PictureFrame.
Сохраняется ли векторная точность SVG при экспорте презентации в PDF/изображения?
Aspose.Slides позволяет извлекать SVG из PictureFrame как оригинальный вектор. При экспорте в PDF или растровые форматы результат может быть растровым в зависимости от настроек экспорта; факт хранения оригинального SVG как вектора подтверждается поведением извлечения.