在 C# 中从 PowerPoint PPT 中提取图像

在 .NET 应用程序中处理 PowerPoint 演示文稿时,您可能需要从 PPT 幻灯片中提取内容。内容可以是文本和图像的形式。在 previous post 中,我们介绍了从 PowerPoint 幻灯片中提取文本。在本文中,我们将向您展示如何在 C# 中从 PowerPoint PPTPPTX 中提取图像。

从 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 中的形状中提取图像

在各种情况下,您可能只需要从形状对象中提取图像。这可以通过以下步骤来实现。

以下代码示例展示了如何使用 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# 中提取幻灯片背景图像。

以下代码示例展示了如何从 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 的信息。此外,您可以通过我们的 论坛 提问。

也可以看看