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

При обработке презентаций PowerPoint в приложении .NET может потребоваться извлечь содержимое из слайдов PPT. Контент может быть в виде текста и изображений. В предыдущем посте мы рассмотрели извлечение текста из слайдов PowerPoint. В этой статье мы покажем вам, как извлекать изображения из PowerPoint PPT или PPTX на C#.

C# .NET API для извлечения изображений из PowerPoint PPT

Для извлечения изображений из PowerPoint PPT/PPTX мы будем использовать Aspose.Slides for .NET. Это многофункциональный .NET API, который позволяет создавать новые презентации и беспрепятственно управлять существующими. Вы можете либо скачать библиотеку DLL API, либо установить ее с помощью NuGet.

PM> Install-Package Aspose.Slides.NET

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

Ниже приведены шаги для извлечения всех изображений в презентации PPT на C#.

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

В следующем примере кода показано, как извлечь изображения из PowerPoint PPT на C#.

// Загрузить презентацию
Presentation pres = new Presentation("presentation.pptx");

Aspose.Slides.IPPImage img = null;
ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;
int imageIndex = 1;
string imageType = "";
String imagePath = "Image_";

// Перебирать изображения
foreach (var image in pres.Images)
{
    // Получить формат изображения
    format = GetImageFormat(image.ContentType);

    // Получить тип изображения
    imageType = image.ContentType;
    imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);

    // Сохранить изображение
    image.SystemImage.Save(imagePath + "Slide_" + imageIndex.ToString() + "." + imageType, format);
    imageIndex++;
}

Извлечение изображений из фигур в PPT

В различных случаях вам может понадобиться извлекать изображения только из объектов формы. Этого можно достичь, выполнив следующие действия.

  • Сначала используйте класс Presentation для загрузки файла презентации.
  • Затем используйте коллекцию Presentation.Slides для циклического просмотра слайдов.
  • Для каждого слайда получите доступ к его формам, используя коллекцию ISlide.Shapes.
  • Выполните следующие шаги для каждой формы в коллекции:
    • Если фигура является автоматической фигурой и заполнена изображением, извлеките изображение, используя свойство IShape.FillFormat.PictureFillFormat.Picture.Image.
    • Если фигура является рамкой изображения, извлеките изображение, используя свойство IPictureFrame.PictureFormat.Picture.Image.
    • Наконец, сохраните изображение как файл.

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

// Загрузить презентацию
Presentation pres = new Presentation("presentation.pptx");

Aspose.Slides.IPPImage img = null;
int slideIndex = 0;
String imageType = "";
bool isImageFound = false;

// Пролистывать слайды
for (int i = 0; i < pres.Slides.Count; i++)
{
    slideIndex++;
    // Доступ к слайду
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Цикл по фигурам
    for (int j = 0; j < slide.Shapes.Count; j++)
    {
        // Доступ к форме
        IShape sh = slide.Shapes[j];

        // Проверьте, это автоматическая форма
        if (sh is AutoShape)
        {
            AutoShape ashp = (AutoShape)sh;

            // Проверьте, есть ли у него изображение
            if (ashp.FillFormat.FillType == FillType.Picture)
            {
                // Получить изображение
                img = ashp.FillFormat.PictureFillFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;

            }
        }
        else if (sh is PictureFrame)
        {
            // Если форма - это рамка для картины
            IPictureFrame pf = (IPictureFrame)sh;

            // Проверьте, содержит ли он изображение
            if (pf.FillFormat.FillType == FillType.Picture)
            {
                // Получить изображение
                img = pf.PictureFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;
            }
        }

        // Если изображение найдено, сохраните его
        if (isImageFound)
        {
            format = GetImageFormat(imageType);
            String imagePath = "Image_";
            img.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "_Shape_" + j.ToString() + "." + imageType, format);
        }

        isImageFound = false;
    }
}

Извлечение изображений из фона слайдов в C#

Другим возможным сценарием может быть извлечение изображений, которые используются только в качестве фона слайдов. Следующие шаги показывают, как извлечь фоновые изображения слайдов в C#.

  • Сначала загрузите файл PPT/PPTX, используя класс Presentation.
  • Затем просмотрите слайды в презентации, используя коллекцию Presentation.Slides.
  • Для каждого слайда выполните следующие действия:

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

// Загрузить презентацию
Presentation pres = new Presentation("presentation.pptx");
Aspose.Slides.IPPImage backImg = null;

int slideIndex = 0;
String imageType = "";
for (int i = 0; i < pres.Slides.Count; i++)
{
    slideIndex++;
    // Доступ к слайду
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Проверьте, есть ли на фоне изображение
    if (slide.Background.FillFormat.FillType == FillType.Picture)
    {
        // Получить изображение  
        backImg = slide.Background.FillFormat.PictureFillFormat.Picture.Image;

        // Установить формат изображения 
        imageType = backImg.ContentType;
        imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
        format = GetImageFormat(imageType);

        // Сохранить изображение
        String imagePath = "BackImage_";
        backImg.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "." + imageType, format);
    }
    else
    {
        if (slide.LayoutSlide.Background.FillFormat.FillType == FillType.Picture)
        {
            // Получить фоновое изображение  
            backImg = slide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image;

            // Установить формат изображения 
            imageType = backImg.ContentType;
            imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
            format = GetImageFormat(imageType);

            // Сохранить изображение
            String imagePath = "BackImage_Slide_" + i;
            backImg.SystemImage.Save(imagePath + "LayoutSlide_" + slideIndex.ToString() + "." + imageType, format);

        }
    }                
}

Мы использовали метод GetImageFormat во всех приведенных выше фрагментах кода. Этот метод возвращает соответствующий формат изображения для предоставленного типа. Реализация этого метода приведена ниже.

public static System.Drawing.Imaging.ImageFormat GetImageFormat(String ImageType)
{
    System.Drawing.Imaging.ImageFormat Format = System.Drawing.Imaging.ImageFormat.Jpeg;
    switch (ImageType)
    {
        case "jpeg":
            Format = System.Drawing.Imaging.ImageFormat.Jpeg;
            break;

        case "emf":
            Format = System.Drawing.Imaging.ImageFormat.Emf;
            break;

        case "bmp":
            Format = System.Drawing.Imaging.ImageFormat.Bmp;
            break;

        case "png":
            Format = System.Drawing.Imaging.ImageFormat.Png;
            break;

        case "wmf":
            Format = System.Drawing.Imaging.ImageFormat.Wmf;
            break;

        case "gif":
            Format = System.Drawing.Imaging.ImageFormat.Gif;
            break;

    }
    return Format;
}

Получить бесплатную лицензию

Вы можете получить бесплатную временную лицензию для использования Aspose.Slides for .NET без ограничений на пробную версию.

Вывод

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

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