ピクチャーフレーム

ピクチャーフレームは、画像を含むシェイプであり、フレームに入った写真のようなものです。

ピクチャーフレームを通じてスライドに画像を追加できます。これにより、ピクチャーフレームをフォーマットすることで画像を整形できます。

ピクチャーフレームを作成

  1. Presentationクラスのインスタンスを作成します。
  2. インデックスを通じてスライドの参照を取得します。
  3. IImagescollectionに画像を追加してIPPImageオブジェクトを作成します。このオブジェクトは、シェイプを埋めるために使用されます。
  4. 画像の幅と高さを指定します。
  5. 参照されたスライドに関連付けられたシェイプオブジェクトによって公開されたAddPictureFrameメソッドを通じて、画像の幅と高さに基づいてPictureFrameを作成します。
  6. スライドにピクチャーフレーム(画像を含む)を追加します。
  7. 修正されたプレゼンテーションをPPTXファイルとして書き出します。

このJavaコードは、ピクチャーフレームを作成する方法を示しています:

// PPTXファイルを表すPresentationクラスのインスタンスを生成
Presentation pres = new Presentation();
try {
    // 最初のスライドを取得
    ISlide sld = pres.getSlides().get_Item(0);
    
    // 画像クラスを生成
    IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
    
    // 画像の高さと幅に相当するピクチャーフレームを追加
    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();
}

相対比率でピクチャーフレームを作成

画像の相対スケーリングを変更することで、より複雑なピクチャーフレームを作成できます。

  1. Presentationクラスのインスタンスを作成します。
  2. インデックスを通じてスライドの参照を取得します。
  3. プレゼンテーション画像コレクションに画像を追加します。
  4. IImagescollectionに関連付けられたプレゼンテーションオブジェクトに画像を追加して、IPPImageオブジェクトを作成します。
  5. ピクチャーフレームで画像の相対的な幅と高さを指定します。
  6. 修正されたプレゼンテーションをPPTXファイルとして書き出します。

このJavaコードは、相対スケールでピクチャーフレームを作成する方法を示しています:

// PPTXを表すPresentationクラスのインスタンスを生成
Presentation pres = new Presentation();
try {
    // 最初のスライドを取得
    ISlide sld = pres.getSlides().get_Item(0);
    
    // 画像クラスを生成
    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();
}

ピクチャーフレームから画像を抽出

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

画像の透明度を取得

Aspose.Slidesを使用すると、画像の透明度を取得できます。このJavaコードはその操作を示しています:

Presentation presentation = new Presentation(folderPath + "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("画像の透明度: " + transparencyValue);
    }
}

ピクチャーフレームフォーマット

Aspose.Slidesは、ピクチャーフレームに適用できる多くのフォーマットオプションを提供しています。これらのオプションを使用することで、特定の要件に合わせてピクチャーフレームを変更できます。

  1. Presentationクラスのインスタンスを作成します。
  2. インデックスを通じてスライドの参照を取得します。
  3. IImagescollectionに関連付けられたプレゼンテーションオブジェクトに画像を追加してIPPImageオブジェクトを作成します。
  4. 画像の幅と高さを指定します。
  5. IShapesオブジェクトに関連付けられたピクチャーフレームに基づいてAddPictureFrameメソッドを通じて、画像の幅と高さに基づいてPictureFrameを作成します。
  6. スライドにピクチャーフレーム(画像を含む)を追加します。
  7. ピクチャーフレームの線の色を設定します。
  8. ピクチャーフレームの線の幅を設定します。
  9. ピクチャーフレームを回転させ、正または負の値を与えます。
    • 正の値は画像を時計回りに回転させます。
    • 負の値は画像を反時計回りに回転させます。
  10. ピクチャーフレーム(画像を含む)をスライドに追加します。
  11. 修正されたプレゼンテーションをPPTXファイルとして書き出します。

このJavaコードは、ピクチャーフレームのフォーマットプロセスを示しています:

// PPTXを表すPresentationクラスのインスタンスを生成
Presentation pres = new Presentation();
try {
    // 最初のスライドを取得
    ISlide sld = pres.getSlides().get_Item(0);
    
    // 画像クラスを生成
    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);
    
    // 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();
}

リンクとして画像を追加

大きなプレゼンテーションサイズを避けるために、画像(または動画)をファイルに直接埋め込む代わりにリンクを通じて追加できます。この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();
}

画像をトリミング

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

    // スライドにピクチャーフレームを追加
    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();
}

画像の切り取られた部分を削除

フレーム内の画像の切り取られた部分を削除したい場合は、deletePictureCroppedAreas()メソッドを使用できます。このメソッドは、切り取られた画像または切り取りが不要な場合は元の画像を返します。

このJavaコードは、その操作を示しています:

Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // 最初のスライドからピクチャーフレームを取得
    IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);

    // ピクチャーフレーム画像の切り取られた部分を削除し、切り取られた画像を返す
    IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();

    // 結果を保存
    presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

アスペクト比を固定

画像を含むシェイプが画像の寸法を変更してもアスペクト比を保持する場合は、setAspectRatioLockedメソッドを使用してアスペクト比を固定設定を行うことができます。

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

StretchOffプロパティの使用

StretchOffsetLeft, StretchOffsetTop, StretchOffsetRightおよびStretchOffsetBottomプロパティを使用すると、IPictureFillFormatインターフェースとPictureFillFormatクラスから、フィル矩形を指定できます。

画像に伸縮が指定されると、ソース矩形は指定されたフィル矩形に適合するようにスケーリングされます。フィル矩形の各辺は、シェイプのバウンディングボックスの対応する辺からのパーセンテージオフセットによって定義されます。正のパーセンテージはインセットを指定し、負のパーセンテージはアウトセットを指定します。

  1. Presentationクラスのインスタンスを作成します。
  2. インデックスを通じてスライドの参照を取得します。
  3. 矩形AutoShapeを追加します。
  4. 画像を作成します。
  5. シェイプのフィルタイプを設定します。
  6. シェイプのピクチャーフィルモードを設定します。
  7. 形状を埋めるために画像を追加します。
  8. シェイプのバウンディングボックスの対応するエッジからの画像オフセットを指定します。
  9. 修正されたプレゼンテーションをPPTXファイルとして書き出します。

このJavaコードは、StretchOffプロパティを使用するプロセスを示します:

// PPTXファイルを表すPresentationクラスのインスタンスを生成
Presentation pres = new Presentation();
try {
    // 最初のスライドを取得
    ISlide slide = pres.getSlides().get_Item(0);

    // 画像クラスを生成
    IPPImage picture;
    IImage image = Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // 矩形に設定されたAutoShapeを追加
    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();
}