場合によっては、PowerPointプレゼンテーションからテキストとともに画像を抽出する必要があります。これを実現するために、この記事では、JavaでPowerPointPPTまたはPPTXからプログラムで画像を抽出する方法について説明します。また、PPTスライドの背景または形状からのみ画像を抽出する方法についても学習します。
PowerPointPPTから画像を抽出するJavaAPI
Aspose.Slides for Javaは、PowerPointプレゼンテーションをシームレスに作成および操作できる、人気のある機能豊富なAPIです。このAPIを使用して、PPT/PPTXファイルから画像を抽出します。 ダウンロードAPIのJARを使用するか、次のMaven構成を使用してインストールできます。
リポジトリ:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
依存:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-slides</artifactId>
<version>22.1</version>
<classifier>jdk16</classifier>
</dependency>
JavaでPowerPointPPTから画像を抽出する
PowerPointプレゼンテーションでは、スライドで使用されるすべての画像が画像コレクションに保存されます。このコレクションにアクセスして、各画像をファイルとして保存できます。以下は、JavaでPPTプレゼンテーションのすべての画像を抽出する手順です。
- まず、Presentationクラスを使用してPPT/PPTXプレゼンテーションをロードします。
- 次に、Presentation.getImages()メソッドを使用して、プレゼンテーションの画像コレクションにアクセスします。
- 最後に、各画像のタイプとフォーマットを取得して保存します。
次のコードサンプルは、JavaでPowerPoint PPTXファイルから画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
Presentation pres = new Presentation("presentation.pptx");
int imageIndex = 1;
String imageType = "";
String imagePath = "Image_";
// 画像をループする
for (IPPImage image : pres.getImages()) {
// 画像タイプを取得
imageType = image.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
// 画像を保存
try {
ImageIO.write(image.getSystemImage(), imageType, new File(imagePath + imageIndex + "." + imageType.toString()));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
imageIndex++;
}
PPTの形状から画像を抽出する
PPTスライドの形状からのみ画像を抽出することもできます。これを実現するための手順は次のとおりです。
- まず、Presentationクラスでプレゼンテーションファイルを読み込みます。
- 次に、Presentation.getSlides()メソッドを使用して、スライドコレクションにアクセスします。
- スライドごとに、ISlide.getShapes()メソッドを使用してその形状にアクセスします。
- コレクション内の図形ごとに次の手順を実行します。
- 形状が自動形状であり、画像で塗りつぶされているかどうかを確認してから、getImage()メソッドを使用してその画像を抽出します。
- 形状が額縁であるかどうかを確認し、getImage()メソッドを使用してその画像を抽出します。
- 最後に、画像をファイルとして保存します。
次のコードサンプルは、Javaを使用してPPTの図形から画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
Presentation pres = new Presentation("presentation.pptx");
com.aspose.slides.IPPImage img = null;
int slideIndex = 0;
String imageType = "";
boolean isImageFound = false;
// スライドをループする
for (int i = 0; i < pres.getSlides().size(); i++) {
slideIndex++;
// スライドにアクセス
ISlide sl = pres.getSlides().get_Item(i);
for (int j = 0; j < sl.getShapes().size(); j++) {
// 形状にアクセスする
IShape sh = sl.getShapes().get_Item(j);
// オートシェイプかどうか確認してください
if (sh instanceof IAutoShape) {
IAutoShape ashp = (IAutoShape) sh;
if (ashp.getFillFormat().getFillType() == FillType.Picture) {
img = ashp.getFillFormat().getPictureFillFormat().get_Picture().getImage();
imageType = img.getContentType();
imageType = imageType.substring(0, imageType.indexOf("/") + 1);
isImageFound = true;
}
}
// 形が額縁の場合
else if (sh instanceof IPictureFrame) {
IPictureFrame pf = (IPictureFrame) sh;
img = pf.getPictureFormat().get_Picture().getImage();
imageType = img.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
isImageFound = true;
}
// 希望の画像フォーマットを設定します
if (isImageFound) {
try {
ImageIO.write(img.getSystemImage(), imageType,
new File("Slide_" + slideIndex + "_Shape_" + j + "." + imageType));
} catch (IO例外 ex) {
// 例外
}
}
isImageFound = false;
}
}
Javaでスライドの背景から画像を抽出する
別の考えられるシナリオは、スライドの背景としてのみ使用される画像を抽出することです。次の手順は、Javaでスライドの背景画像を抽出する方法を示しています。
まず、Presentationクラスを使用してプレゼンテーションをロードします。
次に、Presentation.getSlides()メソッドを使用して、プレゼンテーション内のスライドをループします。
スライドごとに、次の手順を実行します。
ISlide.getBackground().getFillFormat().getFillType()メソッドを使用して、スライドに背景画像があるかどうかを確認します。
背景に画像がある場合は、getImage()メソッドを使用して画像を抽出します。
ISlide.getLayoutSlide().getBackground().getFillFormat().getFillType()メソッドを使用して、レイアウトスライドに背景画像があるかどうかを確認します。
レイアウトスライドの背景が画像で埋め尽くされている場合は、getImage()メソッドを使用して画像を抽出します。
最後に、抽出した画像をファイルとして保存します。
次のコードサンプルは、JavaのPPTでスライドの背景から画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
Presentation pres = new Presentation("presentation.pptx");
com.aspose.slides.IPPImage img = null;
com.aspose.slides.IPPImage backImage = null;
String ImagePath = "BackImage_";
int slideIndex = 0;
String imageType = "";
for (int i = 0; i < pres.getSlides().size(); i++) {
slideIndex++;
// スライドにアクセス
ISlide sl = pres.getSlides().get_Item(i);
// 背景が画像で埋められているかどうかを確認します
if (sl.getBackground().getFillFormat().getFillType() == FillType.Picture) {
// 背景画像を取得する
backImage = sl.getBackground().getFillFormat().getPictureFillFormat().get_Picture().getImage();
// 画像を保存する
BufferedImage image = backImage.getSystemImage();
imageType = backImage.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
try {
ImageIO.write(image, imageType,
new File(ImagePath + "Slide_" + slideIndex + "." + imageType.toString()));
} catch (IOException ex) {
// 例外メッセージを読む
}
} else {
// スライドレイアウトに画像の背景があるかどうかを確認します
if (sl.getLayoutSlide().getBackground().getFillFormat().getFillType() == FillType.Picture) {
// 背景画像を取得する
backImage = sl.getLayoutSlide().getBackground().getFillFormat().getPictureFillFormat().get_Picture()
.getImage();
// 画像を保存
BufferedImage image = backImage.getSystemImage();
imageType = backImage.getContentType();
imageType = imageType.substring(imageType.indexOf("/") + 1, imageType.length());
try {
ImageIO.write(image, imageType,
new File(ImagePath + "LayoutSlide_" + slideIndex + "." + imageType.toString()));
} catch (IOException ex) {
// 例外メッセージを読む
}
}
}
}
無料ライセンスを取得する
Asposeは、評価の制限なしにAspose.Slides for Javaを使用するための無料の一時ライセンスを提供します。 自分で入手できます。
結論
この記事では、JavaでPowerPoint PPT/PPTXから画像を抽出する方法を示しました。さらに、図形またはスライドの背景から個別に画像を抽出する方法についても説明しました。また、ドキュメントにアクセスすると、Aspose.Slides for Javaの詳細を読むことができます。また、フォーラムにクエリを投稿することもできます。