Extraia imagens do PowerPoint PPT em C#

Ao processar as apresentações do PowerPoint em um aplicativo .NET, pode ser necessário extrair o conteúdo dos slides PPT. O conteúdo pode estar na forma de texto e imagens. No post anterior, abordamos a extração de texto de slides do PowerPoint. Neste artigo, mostraremos como extrair imagens do PowerPoint PPT ou PPTX em C#.

API C# .NET para extrair imagens do PowerPoint PPT

Para extrair imagens do PowerPoint PPT/PPTX, usaremos Aspose.Slides for .NET. É uma API .NET rica em recursos que permite criar novas apresentações e manipular as existentes sem problemas. Você pode baixar a DLL da API ou instalá-la usando NuGet.

PM> Install-Package Aspose.Slides.NET

Extrair imagens de um PowerPoint PPT em C#

A seguir estão as etapas para extrair todas as imagens em uma apresentação PPT em C#.

  • Primeiro, use a classe Apresentação para carregar o arquivo PPT/PPTX.
  • Em seguida, percorra todas as imagens na apresentação usando a coleção Presentation.Images.
  • Por fim, obtenha o tipo e o formato de cada imagem e salve-a.

O exemplo de código a seguir mostra como extrair imagens de um PowerPoint PPT em C#.

// Carregar a apresentação
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_";

// Percorrer as imagens
foreach (var image in pres.Images)
{
    // Obter formato de imagem
    format = GetImageFormat(image.ContentType);

    // Obter tipo de imagem
    imageType = image.ContentType;
    imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);

    // Salvar imagem
    image.SystemImage.Save(imagePath + "Slide_" + imageIndex.ToString() + "." + imageType, format);
    imageIndex++;
}

Extrair imagens de formas em um PPT

Em vários casos, pode ser necessário extrair imagens apenas dos objetos de forma. Isso pode ser feito seguindo os passos abaixo.

O exemplo de código a seguir mostra como extrair imagens de formas em um PPT usando C#.

// Carregar a apresentação
Presentation pres = new Presentation("presentation.pptx");

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

// Percorrer os slides
for (int i = 0; i < pres.Slides.Count; i++)
{
    slideIndex++;
    // Acesse o slide
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Percorra as formas
    for (int j = 0; j < slide.Shapes.Count; j++)
    {
        // Acesse a forma
        IShape sh = slide.Shapes[j];

        // Verifique se é uma forma automática
        if (sh is AutoShape)
        {
            AutoShape ashp = (AutoShape)sh;

            // Verifique se tem foto
            if (ashp.FillFormat.FillType == FillType.Picture)
            {
                // Obter imagem
                img = ashp.FillFormat.PictureFillFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;

            }
        }
        else if (sh is PictureFrame)
        {
            // Se a forma é um porta-retrato
            IPictureFrame pf = (IPictureFrame)sh;

            // Verifique se contém uma imagem
            if (pf.FillFormat.FillType == FillType.Picture)
            {
                // Obter imagem
                img = pf.PictureFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;
            }
        }

        // Se a imagem for encontrada, salve-a
        if (isImageFound)
        {
            format = GetImageFormat(imageType);
            String imagePath = "Image_";
            img.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "_Shape_" + j.ToString() + "." + imageType, format);
        }

        isImageFound = false;
    }
}

Extraia imagens de fundos de slides em c#

Outro cenário possível poderia ser a extração de imagens que são usadas apenas como plano de fundo de slide. As etapas a seguir mostram como extrair imagens de plano de fundo do slide em C#.

O exemplo de código a seguir mostra como extrair imagens de planos de fundo de slide em um PPT em C#.

// Carregar a apresentação
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++;
    // Acesse o slide
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Verifique se o fundo tem imagem
    if (slide.Background.FillFormat.FillType == FillType.Picture)
    {
        // Obter foto  
        backImg = slide.Background.FillFormat.PictureFillFormat.Picture.Image;

        // Definir formato de imagem 
        imageType = backImg.ContentType;
        imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
        format = GetImageFormat(imageType);

        // Salvar imagem
        String imagePath = "BackImage_";
        backImg.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "." + imageType, format);
    }
    else
    {
        if (slide.LayoutSlide.Background.FillFormat.FillType == FillType.Picture)
        {
            // Obter imagem de fundo  
            backImg = slide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image;

            // Definir formato de imagem 
            imageType = backImg.ContentType;
            imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
            format = GetImageFormat(imageType);

            // Salvar imagem
            String imagePath = "BackImage_Slide_" + i;
            backImg.SystemImage.Save(imagePath + "LayoutSlide_" + slideIndex.ToString() + "." + imageType, format);

        }
    }                
}

Usamos o método GetImageFormat em todos os trechos de código acima. Este método retorna o formato de imagem apropriado para o tipo fornecido. A implementação deste método é apresentada a seguir.

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

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para usar o Aspose.Slides para .NET sem limitações de avaliação.

Conclusão

Neste artigo, você aprendeu como extrair imagens do PowerPoint PPT/PPTX em C#. Com a ajuda de exemplos de código, demonstramos como extrair imagens de formas e planos de fundo de slides. Você pode explorar mais sobre o Aspose.Slides para .NET visitando a documentação. Além disso, você pode fazer suas perguntas através do nosso fórum.

Veja também