Picture Frame

A picture frame is a shape that contains an image—it is like a picture in a frame.

You can add an image to a slide through a picture frame. This way, you get to format the image by formatting the picture frame.

Create Picture Frame

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Create an PPImage object by adding an image to the ImagesCollection associated with the presentation object that will be used to fill the shape.
  4. Specify the image’s width and height.
  5. Create a PictureFrame based on the image’s width and height through the addPictureFrame method exposed by the shape object associated with the referenced slide.
  6. Add a picture frame (containing the picture) to the slide.
  7. Write the modified presentation as a PPTX file.

This JavaScript code shows you how to create a picture frame:

// Instantiates the Presentation class that represents a PPTX file
var pres = new aspose.slides.Presentation();
try {
    // Gets the first slide
    var sld = pres.getSlides().get_Item(0);
    // Instantiates the Image class
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Adds a picture frame with the picture's equivalent height and width
    sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Write the PPTX file to disk
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Create Picture Frame with Relative Scale

By altering an image’s relative scaling, you can create a more complicated picture frame.

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Add an image to the presentation image collection.
  4. Create an PPImage object by adding an image to the ImagesCollection associated with the presentation object that will be used to fill the shape.
  5. Specify the image’s relative width and height in the picture frame.
  6. Write the modified presentation as a PPTX file.

This JavaScript code shows you how to create a picture frame with relative scale:

// Instantiate Presentation class that represents the PPTX
var pres = new aspose.slides.Presentation();
try {
    // Get the first slide
    var sld = pres.getSlides().get_Item(0);
    // Instantiate the Image class
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Add Picture Frame with height and width equivalent of Picture
    var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Setting relative scale width and height
    pf.setRelativeScaleHeight(0.8);
    pf.setRelativeScaleWidth(1.35);
    // Write the PPTX file to disk
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Extract Image from Picture Frame

You can extract images from PictureFrame objects and save them in PNG, JPG, and other formats. The code example below demonstrates how to extract an image from the document “sample.pptx” and save it in PNG format.

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();
}

Get Transparency of Image

Aspose.Slides allows you to get the transparency effect applied to an image. This JavaScript code demonstrates the operation:

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);
    }
}

Picture Frame Formatting

Aspose.Slides provides many formatting options that can be applied to a picture frame. Using those options, you can alter a picture frame to make it match specific requirements.

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Create an PPImage object by adding an image to the ImagesCollection associated with the presentation object that will be used to fill the shape.
  4. Specify the image’s width and height.
  5. Create a PictureFrame based on the image’s width and height through the addPictureFrame method exposed by the Shapes object associated with the referenced slide.
  6. Add the picture frame (containing the picture) to the slide.
  7. Set the picture frame’s line color.
  8. Set the picture frame’s line width.
  9. Rotate the picture frame by giving it either a positive or negative value.
    • A positive value rotates the image clockwise.
    • A negative value rotates the image anti-clockwise.
  10. Add the picture frame (containing the picture) to the slide.
  11. Write the modified presentation as a PPTX file.

This JavaScript code demonstrates the picture frame formatting process:

// Instantiates the Presentation class that represents the PPTX
var pres = new aspose.slides.Presentation();
try {
    // Gets the first slide
    var sld = pres.getSlides().get_Item(0);
    // Instantiates the Image class
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Adds Picture Frame with height and width equivalent of Picture
    var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Applies some formatting to 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);
    // Writes the PPTX file to disk
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

To avoid large presentation sizes, you can add images (or videos) through links instead of embedding the files directly into presentations. This JavaScript code shows you how to add an image and video into a placeholder:

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();
    }
}

Crop Image

This JavaScript code shows you how to crop an existing image on a slide:

var pres = new aspose.slides.Presentation();
// Creates new image object
try {
    var picture;
    var image = aspose.slides.Images.fromFile(imagePath);
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    // Adds a PictureFrame to a Slide
    var picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 100, 100, 420, 250, picture);
    // Crops the image (percentage values)
    picFrame.getPictureFormat().setCropLeft(23.6);
    picFrame.getPictureFormat().setCropRight(21.5);
    picFrame.getPictureFormat().setCropTop(3);
    picFrame.getPictureFormat().setCropBottom(31);
    // Saves the result
    pres.save(outPptxFile, aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Delete Cropped Areas of Picture

If you want to delete the cropped areas of an image contained in a frame, you can use the deletePictureCroppedAreas() method. This method returns the cropped image or the origin image if cropping is unnecessary.

This JavaScript code demonstrates the operation:

var presentation = new aspose.slides.Presentation("PictureFrameCrop.pptx");
try {
    var slide = presentation.getSlides().get_Item(0);
    // Gets the PictureFrame from the first slide
    var picFrame = slide.getShapes().get_Item(0);
    // Deletes cropped areas of the PictureFrame image and returns the cropped image
    var croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
    // Saves the result
    presentation.save("PictureFrameDeleteCroppedAreas.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Lock Aspect Ratio

If you want a shape containing an image to retain its aspect ratio even after you change the image dimensions, you can use the setAspectRatioLocked method to set the Lock Aspect Ratio setting.

This JavaScript code shows you how to lock a shape’s aspect ratio:

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);
    // set shape to have to preserve aspect ratio on resizing
    pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Use StretchOff Property

Using the setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight and setStretchOffsetBottom methods from the PictureFillFormat class and PictureFillFormat class, you can specify a fill rectangle.

When stretching is specified for an image, a source rectangle is scaled to fit the specified fill rectangle. Each edge of the fill rectangle is defined by a percentage offset from the corresponding edge of the shape’s bounding box. A positive percentage specifies an inset while a negative percentage specifies an outset.

  1. Create an instance of the Presentation class.
  2. Get a slide’s reference through its index.
  3. Add a rectangle AutoShape.
  4. Create an image.
  5. Set the shape’s fill type.
  6. Set the shape’s picture fill mode.
  7. Add a set image to fill the shape.
  8. Specify image offsets from the corresponding edge of the shape’s bounding box
  9. Write the modified presentation as a PPTX file.

This JavaScript code demonstrates a process in which a StretchOff property is used:

// Instantiates the Prseetation class that represents a PPTX file
var pres = new aspose.slides.Presentation();
try {
    // Gets the first slide
    var slide = pres.getSlides().get_Item(0);
    // Instantiates the ImageEx class
    var picture;
    var image = aspose.slides.Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    // Adds an AutoShape set to Rectangle
    var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
    // Sets the shape's fill type
    aShape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Picture));
    // Sets the shape's picture fill mode
    aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(aspose.slides.PictureFillMode.Stretch);
    // Sets the image to fill the shape
    aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
    // Specifies the image offsets from the corresponding edge of the shape's bounding box
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
    // Writes the PPTX file to disk
    pres.save("StretchOffsetLeftForPictureFrame_out.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}