如何通過C#/VB.NET從PowerPoint檔案中提取圖片

2023-03-13 18:02:29

PowerPoint是用於製作幻燈片(簡報)的應用軟體,每張幻燈片中都可以包含文字、圖形、圖形、表格、聲音和影像等多種資訊。有時候我們發現在PPT裡面有一些精美的圖片,或者其他原因想要把PPT裡面的圖片儲存下來。但如果PowerPoint檔案中包含大量圖片,一張張儲存未免太費時間及精力。那有什麼辦法可以高效便捷地提取出PPT中的圖片呢?在這篇文章中,您將學習如何以程式設計方式從PowerPoint檔案中提取圖片。下面是我整理的步驟及方法,並附上C#/VB.NET程式碼供大家參考。

  • 從整個簡報中提取影象
  • 從特定演示幻燈片中提取影象

程式環境:

本次測試時,在程式中引入 Free Spire.Presentation.dll 檔案。

方法1

​Free Spire.Presentation for .NET​​ 下載到本地,解壓,找到 BIN 資料夾下的 Spire.Presentation.dll。然後在 Visual Studio 中開啟「解決方案資源管理器」,滑鼠右鍵點選「參照」,「新增參照」,將本地路徑 BIN 資料夾下的 dll 檔案新增參照至程式。

方法2:

通過 ​NuGet​​安裝。可通過以下 2 種方法安裝:

  1. 可以在 Visual Studio 中開啟「解決方案資源管理器」,滑鼠右鍵點選「參照」,「管理 NuGet 包」,然後搜尋「Free Spire.Presentation」,點選「安裝」。等待程式安裝完成。

  2. 將以下內容複製到 PM 控制檯安裝。

Install-Package FreeSpire.Presentation -Version 7.8

從整個簡報中提取影象

  • 初始化 Presentation 類的一個範例。
  • 使用 Presentation.LoadFromFile() 方法載入 PowerPoint 簡報。
  • 通過 Presentation.Images 屬性獲取簡報中所有圖片的集合。
  • 遍歷集合,呼叫ImageCollection[int].Image.Save()方法將集合中的圖片儲存到圖片檔案中。

完整程式碼

C#

using Spire.Presentation;
using Spire.Presentation.Collections;
using System.Drawing;

namespace ExtractImagesFromPresentation
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //初始化Presentation類的範例
            Presentation ppt = new Presentation();

            //載入PowerPoint簡報
            ppt.LoadFromFile("範例檔案.pptx");

            //獲取簡報的影象集
            ImageCollection imageCollection = ppt.Images;

            //遍歷集合中的影象
            for (int i = 0; i < imageCollection.Count; i++)
            {
                //提取影象
                imageCollection[i].Image.Save(string.Format("Presentation\\圖片{0}.png", i));
            }

            ppt.Dispose();
        }
    }
}

VB.NET

Imports Spire.Presentation
Imports Spire.Presentation.Collections

Namespace ExtractImagesFromPresentation
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '初始化Presentation類的範例
            Dim ppt As Presentation = New Presentation()

            '載入PowerPoint簡報
            ppt.LoadFromFile("範例檔案.pptx")

            '獲取簡報的影象集
            Dim imageCollection As ImageCollection = ppt.Images

            '遍歷集合中的影象
            For i As Integer = 0 To imageCollection.Count - 1
                '提取影象
                imageCollection(i).Image.Save(String.Format("Presentation\圖片{0}.png", i))
            Next

            ppt.Dispose()
        End Sub
    End Class
End Namespace

效果圖

從特定演示幻燈片中提取影象

  • 初始化 Presentation 類的一個範例。
  • 使用 Presentation.LoadFromFile() 方法載入 PowerPoint 簡報。
  • 通過 Presentation.Slides[int] 屬性按索引獲取特定幻燈片。
  • 遍歷幻燈片上的所有形狀。
  • 檢查形狀是否為 SlidePicture 或 PictureShape 型別。 如果結果為真,則使用 SlidePicture.PictureFill.Picture.EmbedImage.Image.Save()或 PictureShape.EmbedImage.Image.Save() 方法將影象儲存到影象檔案。

完整程式碼

C#

using Spire.Presentation;

namespace ExtractImagesFromSlide
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //初始化 Presentation 類的一個範例
            Presentation ppt = new Presentation();
            //載入 PowerPoint 簡報
            ppt.LoadFromFile("範例檔案.pptx");

            //獲取指定幻燈片
            ISlide slide = ppt.Slides[1];

            int i = 0;
            //遍歷指定幻燈片上的所有形狀
            foreach (IShape s in slide.Shapes)
            {
                //檢查形狀是否為SlidePicture型別
                if (s is SlidePicture)
                {
                    //提取影象
                    SlidePicture ps = s as SlidePicture;
                    ps.PictureFill.Picture.EmbedImage.Image.Save(string.Format(@"D:\.NET\提取圖片\bin\Debug\Slide\影象{0}.png", i));
                    i++;
                }
                //檢查形狀是否為 PictureShape 型別
                if (s is PictureShape)
                {
                    //提取影象
                    PictureShape ps = s as PictureShape;
                    ps.EmbedImage.Image.Save(string.Format(@"D:\.NET\提取圖片\bin\Debug\Slide\影象{0}.png", i));
                    i++;
                }
            }
        }
    }
}

VB.NET

Imports Spire.Presentation

Namespace ExtractImagesFromSlide
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '初始化 Presentation 類的一個範例
            Dim ppt As Presentation = New Presentation()
            '載入 PowerPoint 簡報
            ppt.LoadFromFile("範例檔案.pptx")

            '獲取指定幻燈片
            Dim slide As ISlide = ppt.Slides(1)

            Dim i = 0
            '遍歷指定幻燈片上的所有形狀
            For Each s As IShape In slide.Shapes
                '檢查形狀是否為SlidePicture型別
                If TypeOf s Is SlidePicture Then
                    '提取影象
                    Dim ps As SlidePicture = TryCast(s, SlidePicture)
                    ps.PictureFill.Picture.EmbedImage.Image.Save(String.Format("D:\.NET\提取圖片\bin\Debug\Slide\影象{0}.png", i))
                    i += 1
                End If
                '檢查形狀是否為 PictureShape 型別
                If TypeOf s Is PictureShape Then
                    '提取影象
                    Dim ps As PictureShape = TryCast(s, PictureShape)
                    ps.EmbedImage.Image.Save(String.Format("D:\.NET\提取圖片\bin\Debug\Slide\影象{0}.png", i))
                    i += 1
                End If
            Next
        End Sub
    End Class
End Namespace

效果圖

—本文完—