Extraiga imágenes de PowerPoint PPT en C#

Mientras procesa las presentaciones de PowerPoint en una aplicación .NET, es posible que deba extraer contenido de las diapositivas de PPT. El contenido podría estar en forma de texto e imágenes. En la publicación anterior, hemos cubierto la extracción de texto de las diapositivas de PowerPoint. En este artículo, le mostraremos cómo extraer imágenes de PowerPoint PPT o PPTX en C#.

C# .NET API para extraer imágenes de PowerPoint PPT

Para extraer imágenes de PowerPoint PPT/PPTX, usaremos Aspose.Slides for .NET. Es una API .NET rica en funciones que le permite crear nuevas presentaciones y manipular las existentes sin problemas. Puede descargar la DLL de la API o instalarla mediante NuGet.

PM> Install-Package Aspose.Slides.NET

Extraiga imágenes de un PPT de PowerPoint en C#

Los siguientes son los pasos para extraer todas las imágenes en una presentación PPT en C#.

  • Primero, use la clase Presentation para cargar el archivo PPT/PPTX.
  • Luego, recorra todas las imágenes de la presentación usando la colección Presentation.Images.
  • Finalmente, obtenga el tipo y formato de cada imagen y guárdela.

El siguiente ejemplo de código muestra cómo extraer imágenes de un PPT de PowerPoint en C#.

// Cargar la presentación
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_";

// Bucle a través de imágenes
foreach (var image in pres.Images)
{
    // Obtener formato de imagen
    format = GetImageFormat(image.ContentType);

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

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

Extraer imágenes de formas en un PPT

En varios casos, es posible que necesite extraer imágenes solo de los objetos de forma. Esto se puede lograr siguiendo los pasos a continuación.

El siguiente ejemplo de código muestra cómo extraer imágenes de formas en un PPT usando C#.

// Cargar la presentación
Presentation pres = new Presentation("presentation.pptx");

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

// Bucle a través de diapositivas
for (int i = 0; i < pres.Slides.Count; i++)
{
    slideIndex++;
    // Accede a la diapositiva
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Bucle a través de las formas
    for (int j = 0; j < slide.Shapes.Count; j++)
    {
        // Accede a la forma
        IShape sh = slide.Shapes[j];

        // Compruebe si es una forma automática.
        if (sh is AutoShape)
        {
            AutoShape ashp = (AutoShape)sh;

            // Mira si tiene foto
            if (ashp.FillFormat.FillType == FillType.Picture)
            {
                // Obtener la imagen
                img = ashp.FillFormat.PictureFillFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;

            }
        }
        else if (sh is PictureFrame)
        {
            // Si la forma es un marco de imagen
            IPictureFrame pf = (IPictureFrame)sh;

            // Comprobar si contiene una imagen
            if (pf.FillFormat.FillType == FillType.Picture)
            {
                // Obtener la imagen
                img = pf.PictureFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;
            }
        }

        // Si se encuentra la imagen, guárdela
        if (isImageFound)
        {
            format = GetImageFormat(imageType);
            String imagePath = "Image_";
            img.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "_Shape_" + j.ToString() + "." + imageType, format);
        }

        isImageFound = false;
    }
}

Extraer imágenes de fondos de diapositivas en C#

Otro escenario posible podría ser la extracción de imágenes que se usan solo como fondos de diapositivas. Los siguientes pasos muestran cómo extraer imágenes de fondo de diapositivas en C#.

El siguiente ejemplo de código muestra cómo extraer imágenes de fondos de diapositivas en un PPT en C#.

// Cargar la presentación
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++;
    // Accede a la diapositiva
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Compruebe si el fondo tiene una imagen
    if (slide.Background.FillFormat.FillType == FillType.Picture)
    {
        // Obtener imagen  
        backImg = slide.Background.FillFormat.PictureFillFormat.Picture.Image;

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

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

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

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

        }
    }                
}

Hemos utilizado el método GetImageFormat en todos los fragmentos de código anteriores. Este método devuelve el formato de imagen adecuado para el tipo proporcionado. La implementación de este método se muestra a continuación.

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

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para usar Aspose.Slides for .NET sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido a extraer imágenes de PowerPoint PPT/PPTX en C#. Con la ayuda de ejemplos de código, hemos demostrado cómo extraer imágenes de formas y fondos de diapositivas. Puede explorar más sobre Aspose.Slides for .NET visitando la documentación. Además, puede hacer sus preguntas a través de nuestro foro.

Ver también