.NETアプリケーションでPowerPointプレゼンテーションを処理しているときに、PPTスライドからコンテンツを抽出する必要がある場合があります。コンテンツはテキストと画像の形式である可能性があります。 前の投稿では、PowerPointスライドからのテキスト抽出について説明しました。この記事では、PowerPoint PPTまたはPPTXからC#で画像を抽出する方法を紹介します。
PowerPoint PPTから画像を抽出するためのC#.NET API
PowerPoint PPT / PPTXから画像を抽出するには、Aspose.Slides for .NETを使用します。これは機能豊富な.NET APIであり、新しいプレゼンテーションを作成し、既存のプレゼンテーションをシームレスに操作できます。 ダウンロードAPIのDLLを使用するか、NuGetを使用してインストールできます。
PM> Install-Package Aspose.Slides.NET
C#でPowerPointPPTから画像を抽出する
以下は、C#でPPTプレゼンテーションのすべての画像を抽出する手順です。
- まず、PresentationクラスでPPT/PPTXファイルを読み込みます。
- 次に、Presentation.Imagesコレクションを使用して、プレゼンテーション内のすべての画像をループします。
- 最後に、各画像のタイプとフォーマットを取得して保存します。
次のコードサンプルは、C#でPowerPointPPTから画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
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プロパティを使用して画像を抽出します。
- 最後に、画像をファイルとして保存します。
次のコードサンプルは、C#を使用してPPTの形状から画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
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#でスライドの背景画像を抽出する方法を示しています。
- まず、Presentationクラスを使用してPPT/PPTXファイルをロードします。
- 次に、Presentation.Slidesコレクションを使用して、プレゼンテーション内のスライドをループします。
- スライドごとに、次の手順を実行します。
- ISlide.Background.FillFormat.FillTypeプロパティを使用して、スライドに背景画像があるかどうかを確認します。
- 背景に画像がある場合は、Background.FillFormat.PictureFillFormat.Picture.Imageプロパティを使用して画像を抽出します。
- LayoutSlide.Background.FillFormat.FillTypeプロパティを使用して、レイアウトスライドに背景画像があるかどうかを確認します。
- レイアウトスライドの背景が画像で塗りつぶされている場合は、ISlide.LayoutSlide.Background.FillFormat.PictureFillFormat.Picture.Imageプロパティを使用して画像を抽出します。
- 最後に、抽出した画像をファイルとして保存します。
次のコードサンプルは、C#のPPTでスライドの背景から画像を抽出する方法を示しています。
// プレゼンテーションを読み込む
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を使用できます。
結論
この記事では、C#でPowerPoint PPT/PPTXから画像を抽出する方法を学びました。コードサンプルを使用して、図形やスライドの背景から画像を抽出する方法を示しました。 ドキュメントにアクセスすると、Aspose.Slides for .NETの詳細を確認できます。また、フォーラムから質問することもできます。