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 .NET para extrair imagens de apresentações
- Extrair imagens de uma apresentação PPTX em C#
- Extrair imagens de formas
- Extração de imagem do plano de fundo do slide
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.
- Primeiro, use a classe Apresentação para carregar o arquivo de apresentação.
- Em seguida, use a coleção Presentation.Slides para percorrer os slides.
- Para cada slide, acesse suas formas usando a coleção ISlide.Shapes.
- Execute as seguintes etapas para cada forma na coleção:
- Se a forma for uma forma automática e estiver preenchida com uma imagem, extraia a imagem usando a propriedade IShape.FillFormat.PictureFillFormat.Picture.Image.
- Se a forma for uma moldura de imagem, extraia a imagem usando a propriedade IPictureFrame.PictureFormat.Picture.Image.
- Por fim, salve a imagem como um arquivo.
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#.
- Primeiro, carregue o arquivo PPT/PPTX usando a classe Apresentação.
- Em seguida, percorra os slides na apresentação usando a coleção Apresentação.Slides.
- Para cada slide, execute as seguintes etapas:
- Verifique se o slide tem uma imagem de fundo usando a propriedade ISlide.Background.FillFormat.FillType.
- Se o fundo tiver imagem, extraia a imagem usando a propriedade Background.FillFormat.PictureFillFormat.Picture.Image.
- Verifique se o slide de layout tem imagem de fundo usando a propriedade LayoutSlide.Background.FillFormat.FillType.
- Se o plano de fundo do slide de layout estiver preenchido com uma imagem, extraia-o usando a propriedade ISlide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image.
- Por fim, salve a imagem extraída como um arquivo.
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.