Trích xuất hình ảnh từ PowerPoint PPT trong C#

Trong khi xử lý bản trình bày PowerPoint trong ứng dụng .NET, bạn có thể cần trích xuất nội dung từ các trang chiếu PPT. Nội dung có thể ở dạng văn bản và hình ảnh. Trong bài trước, chúng tôi đã đề cập đến việc trích xuất văn bản từ các trang chiếu PowerPoint. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách trích xuất hình ảnh từ PowerPoint PPT hoặc PPTX trong C#.

API C# để trích xuất hình ảnh từ PowerPoint PPT - Tải xuống miễn phí

Để trích xuất hình ảnh từ PowerPoint PPT / PPTX, chúng tôi sẽ sử dụng Aspose.Slides for .NET. Đây là một API .NET giàu tính năng cho phép bạn tạo các bản trình bày mới và thao tác các bản trình bày hiện có một cách liền mạch. Bạn có thể [tải xuống] DLL của 5 API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.Slides.NET

Trích xuất hình ảnh từ PowerPoint PPT trong C#

Sau đây là các bước để trích xuất tất cả các hình ảnh trong bản trình bày PPT trong C#.

  • Đầu tiên, sử dụng lớp Trình bày để tải tệp PPT / PPTX.
  • Sau đó, lặp lại tất cả các hình ảnh trong bản trình bày bằng bộ sưu tập Presentation.Images.
  • Cuối cùng, lấy loại và định dạng của từng hình ảnh và lưu nó.

Mẫu mã sau đây cho thấy cách trích xuất hình ảnh từ PowerPoint PPT trong C#.

// Tải bản trình bày
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_";

// Lặp qua các hình ảnh
foreach (var image in pres.Images)
{
    // Nhận định dạng hình ảnh
    format = GetImageFormat(image.ContentType);

    // Nhận loại hình ảnh
    imageType = image.ContentType;
    imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);

    // Lưu hình ảnh
    image.SystemImage.Save(imagePath + "Slide_" + imageIndex.ToString() + "." + imageType, format);
    imageIndex++;
}

Trích xuất hình ảnh từ hình dạng trong một PPT

Trong các trường hợp khác nhau, bạn có thể chỉ cần trích xuất hình ảnh từ các đối tượng hình dạng. Điều này có thể đạt được bằng cách làm theo các bước dưới đây.

  • Đầu tiên, sử dụng lớp Trình bày để tải tệp bản trình bày.
  • Sau đó, sử dụng bộ sưu tập Presentation.Slides để lặp qua các slide.
  • Đối với mỗi trang trình bày, hãy truy cập các hình dạng của nó bằng bộ sưu tập ISlide.Shapes.
  • Thực hiện các bước sau cho mỗi hình dạng trong bộ sưu tập:

Mẫu mã sau đây cho thấy cách trích xuất hình ảnh từ các hình dạng trong PPT bằng C#.

// Tải bản trình bày
Presentation pres = new Presentation("presentation.pptx");

Aspose.Slides.IPPImage img = null;
int slideIndex = 0;
String imageType = "";
bool isImageFound = false;

// Lặp qua các trang trình bày
for (int i = 0; i < pres.Slides.Count; i++)
{
    slideIndex++;
    // Truy cập trang trình bày
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Lặp qua các hình dạng
   for (int j = 0; j < slide.Shapes.Count; j++)
    {
        // Truy cập hình dạng
        IShape sh = slide.Shapes[j];

        // Kiểm tra xem nó có phải là hình dạng tự động không
        if (sh is AutoShape)
        {
            AutoShape ashp = (AutoShape)sh;

            // Kiểm tra xem nó có hình ảnh không
            if (ashp.FillFormat.FillType == FillType.Picture)
            {
                // Lấy hình
                img = ashp.FillFormat.PictureFillFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;

            }
        }
        else if (sh is PictureFrame)
        {
            // Nếu hình dạng là một khung ảnh
            IPictureFrame pf = (IPictureFrame)sh;

            // Kiểm tra xem nó có chứa hình ảnh không
            if (pf.FillFormat.FillType == FillType.Picture)
            {
                // Lấy hình
                img = pf.PictureFormat.Picture.Image;
                imageType = img.ContentType;
                imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
                isImageFound = true;
            }
        }

        // Nếu hình ảnh được tìm thấy thì hãy lưu nó
        if (isImageFound)
        {
            format = GetImageFormat(imageType);
            String imagePath = "Image_";
            img.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "_Shape_" + j.ToString() + "." + imageType, format);
        }

        isImageFound = false;
    }
}

Trích xuất hình ảnh C# từ Nền trang trình bày PPTX

Một tình huống có thể xảy ra khác có thể là trích xuất hình ảnh chỉ được sử dụng làm hình nền trang chiếu. Các bước sau đây trình bày cách trích xuất ảnh nền của trang chiếu trong C#.

Mẫu mã sau đây cho thấy cách trích xuất hình ảnh từ nền trang trình bày trong PPT trong C#.

// Tải bản trình bày
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++;
    // Truy cập trang trình bày
    ISlide slide = pres.Slides[i];
    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;

    // Kiểm tra xem nền có hình ảnh không
    if (slide.Background.FillFormat.FillType == FillType.Picture)
    {
        // Nhận hình ảnh  
        backImg = slide.Background.FillFormat.PictureFillFormat.Picture.Image;

        // Đặt định dạng hình ảnh 
        imageType = backImg.ContentType;
        imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
        format = GetImageFormat(imageType);

        // Lưu hình ảnh
        String imagePath = "BackImage_";
        backImg.SystemImage.Save(imagePath + "Slide_" + slideIndex.ToString() + "." + imageType, format);
    }
    else
    {
        if (slide.LayoutSlide.Background.FillFormat.FillType == FillType.Picture)
        {
            // Nhận hình nền  
            backImg = slide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image;

            // Đặt định dạng hình ảnh 
            imageType = backImg.ContentType;
            imageType = imageType.Remove(0, imageType.IndexOf("/") + 1);
            format = GetImageFormat(imageType);

            // Lưu hình ảnh
            String imagePath = "BackImage_Slide_" + i;
            backImg.SystemImage.Save(imagePath + "LayoutSlide_" + slideIndex.ToString() + "." + imageType, format);

        }
    }                
}

Chúng tôi đã sử dụng phương thức GetImageFormat trong tất cả các đoạn mã ở trên. Phương thức này trả về định dạng hình ảnh thích hợp cho kiểu được cung cấp. Việc thực hiện phương pháp này được đưa ra dưới đây.

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;
}

API trích xuất hình ảnh PPT của C# PowerPoint - Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để sử dụng Aspose.Slides for .NET mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, bạn đã học cách trích xuất hình ảnh từ PowerPoint PPT trong C#. Với sự trợ giúp của các mẫu mã, chúng tôi đã trình bày cách trích xuất hình ảnh từ các hình dạng và hình nền trang chiếu. Bạn có thể khám phá thêm về Aspose.Slides for .NET bằng cách truy cập tài liệu. Ngoài ra, bạn có thể đặt câu hỏi của mình qua diễn đàn của chúng tôi.

Xem thêm