При обработке презентаций PowerPoint в приложении .NET может потребоваться извлечь содержимое из слайдов PPT. Контент может быть в виде текста и изображений. В предыдущем посте мы рассмотрели извлечение текста из слайдов PowerPoint. В этой статье мы покажем вам, как извлекать изображения из PowerPoint PPT или PPTX на C#.
- .NET API для извлечения изображений из презентаций
- Извлечение изображений из презентации PPTX на C#
- Извлечение изображений из фигур
- Извлечение изображения из фона слайда
C# .NET API для извлечения изображений из PowerPoint PPT
Для извлечения изображений из PowerPoint PPT/PPTX мы будем использовать Aspose.Slides for .NET. Это многофункциональный .NET API, который позволяет создавать новые презентации и беспрепятственно управлять существующими. Вы можете либо скачать библиотеку DLL API, либо установить ее с помощью NuGet.
PM> Install-Package Aspose.Slides.NET
Извлечение изображений из PowerPoint PPT на C#
Ниже приведены шаги для извлечения всех изображений в презентации PPT на C#.
- Сначала используйте класс Presentation для загрузки файла PPT/PPTX.
- Затем прокрутите все изображения в презентации, используя коллекцию Presentation.Images.
- Наконец, получите тип и формат каждого изображения и сохраните его.
В следующем примере кода показано, как извлечь изображения из PowerPoint PPT на C#.
// Загрузить презентацию
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.
- Наконец, сохраните изображение как файл.
В следующем примере кода показано, как извлекать изображения из фигур в PPT с помощью C#.
// Загрузить презентацию
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;
}
}
Извлечение изображений из фона слайдов в C#
Другим возможным сценарием может быть извлечение изображений, которые используются только в качестве фона слайдов. Следующие шаги показывают, как извлечь фоновые изображения слайдов в C#.
- Сначала загрузите файл PPT/PPTX, используя класс Presentation.
- Затем просмотрите слайды в презентации, используя коллекцию Presentation.Slides.
- Для каждого слайда выполните следующие действия:
- Проверьте, есть ли у слайда фоновое изображение, используя свойство ISlide.Background.FillFormat.FillType.
- Если фон имеет изображение, извлеките изображение, используя свойство Background.FillFormat.PictureFillFormat.Picture.Image.
- Проверьте, есть ли на слайде макета фоновое изображение, используя свойство LayoutSlide.Background.FillFormat.FillType.
- Если фон слайда макета заполнен изображением, извлеките его с помощью свойства ISlide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image.
- Наконец, сохраните извлеченное изображение в виде файла.
В следующем примере кода показано, как извлекать изображения из фона слайдов в PPT на C#.
// Загрузить презентацию
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;
}
Получить бесплатную лицензию
Вы можете получить бесплатную временную лицензию для использования Aspose.Slides for .NET без ограничений на пробную версию.
Вывод
В этой статье вы узнали, как извлекать изображения из PowerPoint PPT/PPTX на C#. С помощью примеров кода мы продемонстрировали, как извлекать изображения из фигур и фона слайдов. Вы можете узнать больше об Aspose.Slides для .NET, посетив документацию. Также вы можете задать свои вопросы на нашем форуме.