Home > Code > C# > How to Access & Extract Images from Presentation Shapes inside .NET Apps

How to Access & Extract Images from Presentation Shapes inside .NET Apps

by sher azam   on Jun 30, 2015   Category: C#   |  Views: 993    |  Points: 25   |  Gold 


This technical tip explains how .NET developers can extract images from presentation shapes inside their .NET applications. Images are added in slide background and shapes. Sometimes, it is required to extract the images added in the presentation shapes. The images are added in IPPImageCollection inside Presentation Document Object Model (DOM). This article covers the feature of accessing the images in presentation shape, extracting them from presentation collection and saving them in a file. In Aspose.Slides for .NET, images can be added to slide shape and slide background. The images are added in IPPImageCollection of the presentation. In this example we will traverse through each shape inside every slide of presentation and see if there is any image added in slide shape. If the image will be found for any shape, we will extract that and will save it in file. The following code snippet will serve the purpose.

Code Snippet for Extracting images from presentation shapes

[C# Code Sample]

String path = @"D:\Aspose Data\";
//Accessing the presentation
Presentation pres = new Presentation(path + "ExtractImages.pptx");
Aspose.Slides.IPPImage img = null;
Aspose.Slides.IPPImage Backimg = null;

int slideIndex = 0;
String ImageType = "";
bool ifImageFound = false;
for (int i = 0; i < pres.Slides.Count; i++)
{

slideIndex++;
//Accessing the first slide
ISlide sl = pres.Slides;
System.Drawing.Imaging.ImageFormat Format = System.Drawing.Imaging.ImageFormat.Jpeg;

//Accessing the first slide Slide sl = pres.getSlideByPosition(i);
if (sl.Background.FillFormat.FillType == FillType.Picture)
{
//Getting the back picture
Backimg = sl.Background.FillFormat.PictureFillFormat.Picture.Image;

//Setting the desired picture format

ImageType = Backimg.ContentType;
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1);
Format = GetImageFormat(ImageType);

String ImagePath = path + "BackImage_";
Backimg.SystemImage.Save(ImagePath + "Slide_" + slideIndex.ToString() + "." + ImageType, Format);

}
else
{
if (sl.LayoutSlide.Background.FillFormat.FillType == FillType.Picture)
{
//Getting the back picture
Backimg = sl.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image;

//Setting the desired picture format

ImageType = Backimg.ContentType;
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1);
Format = GetImageFormat(ImageType);

String ImagePath = path + "BackImage_Slide_" + i;
Backimg.SystemImage.Save(ImagePath + "LayoutSlide_" + slideIndex.ToString() + "." + ImageType, Format);

}
}

for (int j = 0; j < sl.Shapes.Count; j++)
{
// Accessing the shape with picture
IShape sh = sl.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);
ifImageFound = 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);
ifImageFound = true;
}
}


//
//Setting the desired picture format
if (ifImageFound)
{
Format = GetImageFormat(ImageType);
String ImagePath = path + "Slides\\Image_";
img.SystemImage.Save(ImagePath + "Slide_" + slideIndex.ToString() + "_Shape_" + j.ToString() + "." + ImageType, Format);
}
ifImageFound = false;
}
}



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;


}



[VB.NET Code Sample]


Dim path As String = "D:\Aspose Data\"
'Accessing the presentation
Dim pres As New Presentation(path & "ExtractImages.pptx")
Dim img As Aspose.Slides.IPPImage = Nothing
Dim Backimg As Aspose.Slides.IPPImage = Nothing

Dim slideIndex As Integer = 0
Dim ImageType As String = ""
Dim ifImageFound As Boolean = False
For i As Integer = 0 To pres.Slides.Count - 1

slideIndex += 1
'Accessing the first slide
Dim sl As ISlide = pres.Slides(i)
Dim Format As System.Drawing.Imaging.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg

'Accessing the first slide Slide sl = pres.getSlideByPosition(i);
If sl.Background.FillFormat.FillType = FillType.Picture Then
'Getting the back picture
Backimg = sl.Background.FillFormat.PictureFillFormat.Picture.Image

'Setting the desired picture format

ImageType = Backimg.ContentType
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1)
Format = GetImageFormat(ImageType)

Dim ImagePath As String = path & "BackImage_"
Backimg.SystemImage.Save(ImagePath & "Slide_" & slideIndex.ToString() & "." & ImageType, Format)

Else
If sl.LayoutSlide.Background.FillFormat.FillType = FillType.Picture Then
'Getting the back picture
Backimg = sl.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Image

'Setting the desired picture format

ImageType = Backimg.ContentType
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1)
Format = GetImageFormat(ImageType)

Dim ImagePath As String = path & "BackImage_Slide_" & i
Backimg.SystemImage.Save(ImagePath & "LayoutSlide_" & slideIndex.ToString() & "." & ImageType, Format)

End If
End If

For j As Integer = 0 To sl.Shapes.Count - 1
' Accessing the shape with picture
Dim sh As IShape = sl.Shapes(j)

If TypeOf sh Is AutoShape Then
Dim ashp As AutoShape = CType(sh, AutoShape)
If ashp.FillFormat.FillType = FillType.Picture Then
img = ashp.FillFormat.PictureFillFormat.Picture.Image
ImageType = img.ContentType
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1)
ifImageFound = True

End If

ElseIf TypeOf sh Is PictureFrame Then
Dim pf As IPictureFrame = CType(sh, IPictureFrame)
If pf.FillFormat.FillType = FillType.Picture Then
img = pf.PictureFormat.Picture.Image
ImageType = img.ContentType
ImageType = ImageType.Remove(0, ImageType.IndexOf("/") + 1)
ifImageFound = True
End If
End If


'
'Setting the desired picture format
If ifImageFound Then
Format = GetImageFormat(ImageType)
Dim ImagePath As String = path & "Slides\Image_"
img.SystemImage.Save(ImagePath & "Slide_" & slideIndex.ToString() & "_Shape_" & j.ToString() & "." & ImageType, Format)
End If
ifImageFound = False
Next j
Next i
End Sub



Public Shared Function GetImageFormat(ByVal ImageType As String) As System.Drawing.Imaging.ImageFormat

Dim Format As System.Drawing.Imaging.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg

Select Case ImageType
Case "jpeg"
Format = System.Drawing.Imaging.ImageFormat.Jpeg

Case "emf"
Format = System.Drawing.Imaging.ImageFormat.Emf

Case "bmp"
Format = System.Drawing.Imaging.ImageFormat.Bmp

Case "png"
Format = System.Drawing.Imaging.ImageFormat.Png

Case "wmf"
Format = System.Drawing.Imaging.ImageFormat.Wmf

Case "gif"
Format = System.Drawing.Imaging.ImageFormat.Gif

End Select

Return Format

End Function



Overview: Aspose.Slides for .NET

Aspose.Slides is a .NET component to read, write and modify a PowerPoint document without using MS PowerPoint. PowerPoint versions from 97-2007 and all three PowerPoint formats: PPT, POT, PPS are also supported. Now you can create, access, copy, clone, edit and delete slides in your presentations. Other features include PPT/PPTX printing, PPT to XPS format, saving PowerPoint slides into PDF, adding & modifying audio & video frames, using shapes like rectangles or ellipses and saving presentations in SVG format, streams or images.

- Homepage of Aspose.Slides for .NET: http://www.aspose.com/.net/powerpoint-component.aspx

- Download Aspose.Slides for .NET: http://www.aspose.com/community/files/51/.net-components/aspose.slides-for-.net/default.aspx



Post Code  |  Code Snippet Home

User Responses


No response found, be the first to review this code snippet.

Submit feedback about this code snippet

Please sign in to post feedback

Latest Posts