How to Access & Extract Images from Presentation Shapes inside .NET Apps
Join the DZone community and get the full member experience.
Join For Free// 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[i];
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
Opinions expressed by DZone contributors are their own.
Comments