从演示文稿形状中提取图像
Contents
[
Hide
]
图像通常被添加到形状中,并且经常用作幻灯片的背景。这些图像对象是通过 IImageCollection 添加的,这是一个 IPPImage 对象的集合。
本文解释了如何提取添加到演示文稿中的图像。
要从演示文稿中提取图像,您必须首先通过遍历每个幻灯片并再遍历每个形状来定位图像。一旦找到或识别图像,您可以提取它并将其保存为新文件。
void Run()
{
System::String path = u"D:\\Aspose Data\\";
//访问演示文稿
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(path + u"ExtractImages.pptx");
System::SharedPtr<Aspose::Slides::IPPImage> img;
System::SharedPtr<Aspose::Slides::IPPImage> Backimg;
int32_t slideIndex = 0;
System::String ImageType = u"";
bool ifImageFound = false;
for (int32_t i = 0; i < pres->get_Slides()->get_Count(); i++)
{
slideIndex++;
//访问第一个幻灯片
System::SharedPtr<ISlide> sl = pres->get_Slides()->idx_get(i);
System::SharedPtr<System::Drawing::Imaging::ImageFormat> Format = System::Drawing::Imaging::ImageFormat::get_Jpeg();
if (sl->get_Background()->get_FillFormat()->get_FillType() == Aspose::Slides::FillType::Picture)
{
//获取背景图像
Backimg = sl->get_Background()->get_FillFormat()->get_PictureFillFormat()->get_Picture()->get_Image();
//设置所需的图像格式
ImageType = Backimg->get_ContentType();
ImageType = ImageType.Remove(0, ImageType.IndexOf(u"/") + 1);
Format = GetImageFormat(ImageType);
System::String ImagePath = path + u"BackImage_";
Backimg->get_SystemImage()->Save(ImagePath + u"Slide_" + System::Convert::ToString(slideIndex) + u"." + ImageType, Format);
}
else
{
if (sl->get_LayoutSlide()->get_Background()->get_FillFormat()->get_FillType() == Aspose::Slides::FillType::Picture)
{
//获取背景图像
Backimg = sl->get_LayoutSlide()->get_Background()->get_FillFormat()->get_PictureFillFormat()->get_Picture()->get_Image();
//设置所需的图像格式
ImageType = Backimg->get_ContentType();
ImageType = ImageType.Remove(0, ImageType.IndexOf(u"/") + 1);
Format = GetImageFormat(ImageType);
System::String ImagePath = path + u"BackImage_Slide_" + i;
Backimg->get_SystemImage()->Save(ImagePath + u"LayoutSlide_" + System::Convert::ToString(slideIndex) + u"." + ImageType, Format);
}
}
for (int32_t j = 0; j < sl->get_Shapes()->get_Count(); j++)
{
// 访问包含图像的形状
System::SharedPtr<IShape> sh = sl->get_Shapes()->idx_get(j);
if (System::ObjectExt::Is<AutoShape>(sh))
{
System::SharedPtr<AutoShape> ashp = System::ExplicitCast<Aspose::Slides::AutoShape>(sh);
if (ashp->get_FillFormat()->get_FillType() == Aspose::Slides::FillType::Picture)
{
img = ashp->get_FillFormat()->get_PictureFillFormat()->get_Picture()->get_Image();
ImageType = img->get_ContentType();
ImageType = ImageType.Remove(0, ImageType.IndexOf(u"/") + 1);
ifImageFound = true;
}
}
else if (System::ObjectExt::Is<PictureFrame>(sh))
{
System::SharedPtr<IPictureFrame> pf = System::ExplicitCast<Aspose::Slides::IPictureFrame>(sh);
if (pf->get_FillFormat()->get_FillType() == Aspose::Slides::FillType::Picture)
{
img = pf->get_PictureFormat()->get_Picture()->get_Image();
ImageType = img->get_ContentType();
ImageType = ImageType.Remove(0, ImageType.IndexOf(u"/") + 1);
ifImageFound = true;
}
}
//设置首选图像格式
if (ifImageFound)
{
Format = GetImageFormat(ImageType);
System::String ImagePath = path + u"Slides\\Image_";
img->get_SystemImage()->Save(ImagePath + u"Slide_" + System::Convert::ToString(slideIndex) + u"_Shape_" + System::Convert::ToString(j) + u"." + ImageType, Format);
}
ifImageFound = false;
}
}
}
System::SharedPtr<System::Drawing::Imaging::ImageFormat> GetImageFormat(System::String ImageType)
{
System::SharedPtr<System::Drawing::Imaging::ImageFormat> Format = System::Drawing::Imaging::ImageFormat::get_Jpeg();
{
const System::String& switch_value_0 = ImageType;
do {
if (switch_value_0 == u"jpeg")
{
Format = System::Drawing::Imaging::ImageFormat::get_Jpeg();
break;
}
if (switch_value_0 == u"emf")
{
Format = System::Drawing::Imaging::ImageFormat::get_Emf();
break;
}
if (switch_value_0 == u"bmp")
{
Format = System::Drawing::Imaging::ImageFormat::get_Bmp();
break;
}
if (switch_value_0 == u"png")
{
Format = System::Drawing::Imaging::ImageFormat::get_Png();
break;
}
if (switch_value_0 == u"wmf")
{
Format = System::Drawing::Imaging::ImageFormat::get_Wmf();
break;
}
if (switch_value_0 == u"gif")
{
Format = System::Drawing::Imaging::ImageFormat::get_Gif();
break;
}
} while (false);
}
return Format;
}