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#.
- .NET API para extraer imágenes de presentaciones
- Extraer imágenes de una presentación PPTX en C#
- Extraer imágenes de formas
- Extracción de imagen del fondo de la diapositiva
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.
- Primero, use la clase Presentation para cargar el archivo de presentación.
- Luego, use la colección Presentation.Slides para recorrer las diapositivas.
- Para cada diapositiva, acceda a sus formas usando la colección ISlide.Shapes.
- Realice los siguientes pasos para cada forma de la colección:
- Si la forma es una forma automática y se rellena con una imagen, extraiga la imagen usando la propiedad IShape.FillFormat.PictureFillFormat.Picture.Image.
- Si la forma es un marco de imagen, extraiga la imagen usando la propiedad IPictureFrame.PictureFormat.Picture.Image.
- Finalmente, guarde la imagen como un archivo.
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#.
- Primero, cargue el archivo PPT/PPTX usando la clase Presentation.
- Luego, recorra las diapositivas de la presentación usando la colección Presentation.Slides.
- Para cada diapositiva, realice los siguientes pasos:
- Verifique si la diapositiva tiene una imagen de fondo usando la propiedad ISlide.Background.FillFormat.FillType.
- Si el fondo tiene una imagen, extráigala usando la propiedad Background.FillFormat.PictureFillFormat.Picture.Image.
- Verifique si la diapositiva de diseño tiene una imagen de fondo usando la propiedad LayoutSlide.Background.FillFormat.FillType.
- Si el fondo de la diapositiva de diseño está lleno de una imagen, extráigala usando la propiedad ISlide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image.
- Finalmente, guarde la imagen extraída como un archivo.
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.