在 .NET 应用程序中处理 PowerPoint 演示文稿时,您可能需要从 PPT 幻灯片中提取内容。内容可以是文本和图像的形式。在 previous post 中,我们介绍了从 PowerPoint 幻灯片中提取文本。在本文中,我们将向您展示如何在 C# 中从 PowerPoint PPT 或 PPTX 中提取图像。
从 PowerPoint PPT 中提取图像的 C# API - 免费下载
为了从 PowerPoint PPT/PPTX 中提取图像,我们将使用 Aspose.Slides for .NET。它是一个功能丰富的 .NET API,允许您创建新的演示文稿并无缝地操作现有的演示文稿。您可以 下载 API 的 DLL 或使用 NuGet 安装它。
PM> Install-Package Aspose.Slides.NET
在 C# 中从 PowerPoint PPT 中提取图像
以下是在 C# 中提取 PPT 演示文稿中的所有图像的步骤。
- 首先,使用 Presentation 类加载 PPT/PPTX 文件。
- 然后,使用 Presentation.Images 集合遍历演示文稿中的所有图像。
- 最后,获取每个图像的类型和格式并保存。
以下代码示例展示了如何使用 C# 从 PowerPoint PPT 中提取图像。
// 加载演示文稿
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 属性提取图像。
- 最后,将图像保存为文件。
以下代码示例展示了如何使用 C# 从 PPT 中的形状中提取图像。
// 加载演示文稿
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;
}
}
从 PPTX 幻灯片背景中提取 C# 图像
另一种可能的情况是提取仅用作幻灯片背景的图像。以下步骤展示了如何在 C# 中提取幻灯片背景图像。
- 首先,使用 Presentation 类加载 PPT/PPTX 文件。
- 然后,使用 Presentation.Slides 集合循环浏览演示文稿中的幻灯片。
- 对于每张幻灯片,请执行以下步骤:
- 使用 ISlide.Background.FillFormat.FillType 属性检查幻灯片是否有背景图像。
- 如果背景有图片,则使用 Background.FillFormat.PictureFillFormat.Picture.Image 属性提取图像。
- 使用 LayoutSlide.Background.FillFormat.FillType 属性检查布局幻灯片是否具有背景图像。
- 如果布局幻灯片的背景填充有图片,则使用 ISlide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image 属性提取它。
- 最后,将提取的图像保存为文件。
以下代码示例展示了如何从 C# PPT 中的幻灯片背景中提取图像。
// 加载演示文稿
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;
}
C# PowerPoint PPT 图像提取 API - 获得免费许可证
您可以获得 免费的临时许可证 以使用 Aspose.Slides for .NET,而不受评估限制。
结论
在本文中,您学习了如何使用 C# 从 PowerPoint PPT 中提取图像。在代码示例的帮助下,我们演示了如何从形状和幻灯片背景中提取图像。您可以通过访问 文档 探索更多关于 Aspose.Slides for .NET 的信息。此外,您可以通过我们的 论坛 提问。