Извлечение изображений из PowerPoint PPT в Java

В некоторых случаях вам может понадобиться извлечь изображения из презентаций PowerPoint вместе с текстом. Для этого в этой статье рассказывается, как программно извлекать изображения из PowerPoint PPT или PPTX на Java. Вы также узнаете, как извлекать изображения только из фона или фигур в слайдах PPT.

Java API для извлечения изображений из PowerPoint PPT

Aspose.Slides for Java — это популярный и многофункциональный API, который позволяет легко создавать и управлять презентациями PowerPoint. Мы будем использовать этот API для извлечения изображений из файлов PPT/PPTX. Вы можете либо скачать JAR API, либо установить его, используя следующие конфигурации 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>

Извлечение изображений из PowerPoint PPT на Java

В презентациях PowerPoint все изображения, используемые в слайдах, хранятся в коллекции изображений. К этой коллекции можно получить доступ, и каждое изображение может быть сохранено в виде файла. Ниже приведены шаги для извлечения всех изображений в презентации PPT на Java.

  • Сначала используйте класс Presentation для загрузки презентации PPT/PPTX.
  • Затем получите доступ к коллекции изображений в презентации с помощью метода Presentation.getImages().
  • Наконец, получите тип и формат каждого изображения и сохраните его.

В следующем примере кода показано, как извлечь изображения из файла PowerPoint PPTX в Java.

// Загрузить презентацию
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().
    • Наконец, сохраните изображение как файл.

В следующем примере кода показано, как извлекать изображения из фигур в PPT с помощью Java.

// Загрузить презентацию
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().getPicture().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().getPicture().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().

    • Наконец, сохраните извлеченное изображение в виде файла.

В следующем примере кода показано, как извлекать изображения из фона слайдов в PPT на Java.

// Загрузить презентацию
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().getPicture().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().getPicture()
          .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 без ограничений на пробную версию. Вы можете получить один для себя.

Вывод

В этой статье мы продемонстрировали, как извлекать изображения из PowerPoint PPT/PPTX на Java. Кроме того, мы рассмотрели, как отдельно извлекать изображения из фигуры или фона слайда. Кроме того, вы можете узнать больше об Aspose.Slides for Java, посетив документацию. Кроме того, вы можете размещать свои вопросы на нашем форуме.

Смотрите также