ピクチャーフレーム

ピクチャーフレームは、画像を含む形状であり、額縁に入った写真のようなものです。

ピクチャーフレームを通じてスライドに画像を追加できます。この方法では、ピクチャーフレームの書式設定により画像も書式設定できます。

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

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

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

  # PPTXファイルを表すPresentationクラスのインスタンスを作成
  $pres = new Presentation();
  try {
    # 最初のスライドを取得
    $sld = $pres->getSlides()->get_Item(0);
    # Imageクラスをインスタンス化
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # 画像の等価な高さと幅のピクチャーフレームを追加
    $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
    # PPTXファイルをディスクに書き込み
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

相対スケールでピクチャーフレームを作成

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

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

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

  # PPTXを表すPresentationクラスをインスタンス化
  $pres = new Presentation();
  try {
    # 最初のスライドを取得
    $sld = $pres->getSlides()->get_Item(0);
    # Imageクラスをインスタンス化
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # 画像の等しい高さと幅でピクチャーフレームを追加
    $pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
    # 相対スケールの幅と高さを設定
    $pf->setRelativeScaleHeight(0.8);
    $pf->setRelativeScaleWidth(1.35);
    # PPTXファイルをディスクに書き込み
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

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

PictureFrameオブジェクトから画像を抽出し、PNG、JPG、その他の形式で保存できます。以下のコード例は、ドキュメント「sample.pptx」から画像を抽出し、PNG形式で保存する方法を示しています。

  $presentation = new Presentation("sample.pptx");
  try {
    $firstSlide = $presentation->getSlides()->get_Item(0);
    $firstShape = $firstSlide->getShapes()->get_Item(0);
    if (java_instanceof($firstShape, new JavaClass("com.aspose.slides.PictureFrame"))) {
      $pictureFrame = $firstShape;
      try {
        $slideImage = $pictureFrame->getPictureFormat()->getPicture()->getImage()->getImage();
        $slideImage->save("slide_1_shape_1.png", ImageFormat::Png);
      } finally {
        if (!java_is_null($slideImage)) {
          $slideImage->dispose();
        }
      }
    }
  } catch (JavaException $e) {
  } finally {
    $presentation->dispose();
  }

画像の透明度を取得

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

  $presentation = new Presentation($folderPath . "Test.pptx");
  $pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
  $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
  foreach($imageTransform as $effect) {
    if (java_instanceof($effect, new JavaClass("com.aspose.slides.AlphaModulateFixed"))) {
      $alphaModulateFixed = $effect;
      $transparencyValue = 100 - $alphaModulateFixed->getAmount();
      echo("画像の透明度: " . $transparencyValue);
    }
  }

ピクチャーフレームの書式設定

Aspose.Slidesは、ピクチャーフレームに適用できる多くの書式設定オプションを提供しています。それらのオプションを使用して、特定の要件に合うようにピクチャーフレームを変更できます。

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

以下のPHPコードは、ピクチャーフレームの書式設定プロセスを示しています:

  # PPTXファイルを表すPresentationクラスのインスタンスを作成
  $pres = new Presentation();
  try {
    # 最初のスライドを取得
    $sld = $pres->getSlides()->get_Item(0);
    # Imageクラスをインスタンス化
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # 画像の等しい高さと幅でピクチャーフレームを追加
    $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(java("java.awt.Color")->BLUE);
    $pf->getLineFormat()->setWidth(20);
    $pf->setRotation(45);
    # PPTXファイルをディスクに書き込み
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

リンクとして画像を追加

プレゼンテーションのサイズを大きくしないために、ファイルを直接埋め込むのではなく、リンクを通じて画像(または動画)を追加できます。このPHPコードは、プレースホルダーに画像と動画を追加する方法を示しています:

  $presentation = new Presentation("input.pptx");
  try {
    $shapesToRemove = new Java("java.util.ArrayList");
    $shapesCount = $presentation->getSlides()->get_Item(0)->getShapes()->size();
    for($i = 0; $i < java_values($shapesCount) ; $i++) {
      $autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item($i);
      if (java_is_null($autoShape->getPlaceholder())) {
        continue;
      }
      switch ($autoShape->getPlaceholder()->getType()) {
        case PlaceholderType::Picture :
          $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 :
          $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;
      }
    }
    foreach($shapesToRemove as $shape) {
      $presentation->getSlides()->get_Item(0)->getShapes()->remove($shape);
    }
    $presentation->save("output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

画像をトリミング

このPHPコードは、スライド上の既存の画像をトリミングする方法を示しています:

  $pres = new Presentation();
  # 新しい画像オブジェクトを作成
  try {
    $picture;
    $image = Images->fromFile($imagePath);
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # スライドにピクチャーフレームを追加
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(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, SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

ピクチャーのトリミングされた領域を削除

フレームに含まれる画像のトリミングされた領域を削除したい場合は、deletePictureCroppedAreas()メソッドを使用できます。このメソッドは、トリミングされた画像またはトリミングが不要な場合は元の画像を返します。

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

  $presentation = new Presentation("PictureFrameCrop.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # 最初のスライドからPictureFrameを取得
    $picFrame = $slide->getShapes()->get_Item(0);
    # PictureFrame画像のトリミングされた領域を削除し、トリミングされた画像を返す
    $croppedImage = $picFrame->getPictureFormat()->deletePictureCroppedAreas();
    # 結果を保存
    $presentation->save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

アスペクト比をロック

画像を含む形状が画像の寸法を変更してもアスペクト比を保持するようにしたい場合は、setAspectRatioLockedメソッドを使用してアスペクト比のロック設定を行うことができます。

このPHPコードは、形状のアスペクト比をロックする方法を示しています:

  $pres = new Presentation("pres.pptx");
  try {
    $layout = $pres->getLayoutSlides()->getByType(SlideLayoutType::Custom);
    $emptySlide = $pres->getSlides()->addEmptySlide($layout);
    $picture;
    $image = Images->fromFile("image.png");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    $pictureFrame = $emptySlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $presImage->getWidth(), $presImage->getHeight(), $picture);
    # リサイズ時にアスペクト比を保持するように形状を設定
    $pictureFrame->getPictureFrameLock()->setAspectRatioLocked(true);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

StretchOffプロパティを使用

StretchOffsetLeftStretchOffsetTopStretchOffsetRightおよびStretchOffsetBottomプロパティを使用すると、画像を指定した塗りつぶし矩形にスケーリングできます。

画像に対して伸縮が指定されると、ソース矩形が指定された塗りつぶし矩形に合わせてスケーリングされます。塗りつぶし矩形の各エッジは、形状の境界ボックスの対応するエッジからの割合オフセットによって定義されます。正の百分比は内側を指定し、負の百分比は外側を指定します。

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

以下のPHPコードは、StretchOffプロパティを使用するプロセスを示しています:

  # PPTXファイルを表すPresentationクラスのインスタンスを作成
  $pres = new Presentation();
  try {
    # 最初のスライドを取得
    $slide = $pres->getSlides()->get_Item(0);
    # ImageExクラスをインスタンス化
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # 四角形に設定されたAutoShapeを追加
    $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 (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }