PythonでPowerPointプレゼンテーションから画像を抽出する

画像は、コンテンツを生き生きとさせる効果的なコミュニケーション手段です。これが、画像がWebページ、ドキュメント、プレゼンテーションなどで広く採用されている理由です。MSPowerPointプレゼンテーションは通常、テキストが少なく、グラフィックオブジェクトや画像が多い状態で構築されています。したがって、プログラムでプレゼンテーションを処理する場合、テキストと一緒に画像を抽出する必要がある場合があります。これを実現するために、この記事では、PythonでPPTまたはPPTXプレゼンテーションから画像を抽出する方法について説明します。

プレゼンテーションから画像を抽出するPythonライブラリ

PowerPointプレゼンテーションから画像を抽出するには、Aspose.Slides for Python via .NETを使用します。これは、プレゼンテーションを最初から作成するように設計された強力なPythonライブラリです。さらに、既存のプレゼンテーションをシームレスに変換および操作できます。次のpipコマンドを使用して、PyPIからインストールできます。

> pip install aspose.slides

PythonでPowerPointPPTから画像を抽出する

以下は、PythonでPowerPointプレゼンテーションから画像を抽出する手順です。

  • Presentationクラスを使用してプレゼンテーションをロードします。
  • Presentation.imagesコレクションを使用して、プレゼンテーション内の画像をループします。
  • 各画像をファイルとして保存します。

次のコードサンプルは、PythonでPPTXファイルから画像を抽出する方法を示しています。

import aspose.slides as slides
import aspose.pydrawing as drawing

imageIndex=1
# load presentation
with slides.Presentation("presentation.pptx") as pres:

    # loop through images
    for image in pres.images:
        file_name = "Image_{0}.{1}"
        image_type = image.content_type.split("/")[1]
        image_format = get_image_format(image_type)

        # save image
        image.system_image.save(file_name.format( imageIndex, image_type), image_format)
        imageIndex = imageIndex + 1

PPTの形状から画像を抽出する

場合によっては、プレゼンテーションの形状からのみ画像を抽出する必要があります。それでは、PythonでPPTの形状から画像を抽出する方法を見てみましょう。

  • まず、Presentationクラスを使用してプレゼンテーションをロードします。
  • 次に、Presentation.slidesコレクションを使用してプレゼンテーションのスライドをループします。
  • スライドごとに、ISlide.shapesコレクションを使用してその図形にアクセスします。
  • コレクション内の形状ごとに、次の手順を実行します。
    • 図形が自動図形で、塗りつぶしの種類が画像の場合は、IShape.fill \ format.picture \ fill\format.picture.imageプロパティを使用して画像を抽出します。
    • 形状が額縁の場合は、IShape.picture\format.picture.imageプロパティを使用して画像を抽出します。
    • 最後に、画像をファイルとして保存します。

次のコードサンプルは、Pythonを使用してPPTプレゼンテーションの図形から画像を抽出する方法を示しています。

import aspose.slides as slides
import aspose.pydrawing as drawing

# load presentation
with slides.Presentation("pres.pptx") as pres:
    slideIndex = 0
    image_type = ""
    
    # loop through slides
    for slide in pres.slides:
        slideIndex += 1
        image_format = drawing.imaging.ImageFormat.jpeg
        file_name = "BackImage_Slide_{0}{1}.{2}"
      
        # loop through shapes in slide
        for i in range(len(slide.shapes)):
            shape = slide.shapes[i]
            shape_image = None

            # check is shape is an auto shape or picture frame
            if type(shape) is slides.AutoShape and shape.fill_format.fill_type == slides.FillType.PICTURE:
                shape_image = shape.fill_format.picture_fill_format.picture.image
            elif type(shape) is slides.PictureFrame:
                shape_image = shape.picture_format.picture.image

            # save image
            if shape_image is not None:
                image_type = shape_image.content_type.split("/")[1]
                image_format = get_image_format(image_type)

                shape_image.system_image.save(
                                file_name.format("shape_"+str(i)+"_", slideIndex, image_type), 
                                image_format)

PPTのスライドの背景から画像を抽出する

別のシナリオは、スライドの背景として使用される画像を抽出することです。以下は、PPTプレゼンテーションのスライドの背景からのみ画像を抽出する手順です。

  • まず、Presentationクラスを使用してプレゼンテーションをロードします。
  • 次に、Presentation.slidesコレクションを使用してプレゼンテーションのスライドをループします。
  • スライドごとに、次の手順を実行します。
    • ISlide.background.fill \ format.fill \ typeプロパティを使用して、スライドに背景画像があるかどうかを確認します。
    • 背景に画像がある場合は、ISlide.background.fill \ format.picture \ fill\format.picture.imageプロパティを使用して画像を抽出します。
    • ISlide.layout \ slide.background.fill \ format.fill \ typeプロパティを使用して、レイアウトスライドに背景画像があるかどうかを確認します。
    • 背景が画像で塗りつぶされている場合は、ISlide.layout \ slide.background.fill \ format.picture \ fill\format.picture.imageプロパティを使用して画像を抽出します。
    • 最後に、抽出した画像をファイルとして保存します。

次のコードサンプルは、PythonのPPTでスライドの背景から画像を抽出する方法を示しています。

import aspose.slides as slides
import aspose.pydrawing as drawing

# load presentation
with slides.Presentation("pres.pptx") as pres:
    slideIndex = 0
    image_type = ""
    
    # loop through the slides in presentation
    for slide in pres.slides:
        slideIndex += 1
        image_format = drawing.imaging.ImageFormat.jpeg
        back_image = None
        file_name = "BackImage_Slide_{0}{1}.{2}"
        is_layout = False

        # check if the slide's and layout slide's backgrounds are filled with picture
        if slide.background.fill_format.fill_type == slides.FillType.PICTURE:
            back_image = slide.background.fill_format.picture_fill_format.picture.image
        elif slide.layout_slide.background.fill_format.fill_type == slides.FillType.PICTURE:
            back_image = slide.layout_slide.background.fill_format.picture_fill_format.picture.image
            is_layout = True

        # save image
        if back_image is not None:
            image_type = back_image.content_type.split("/")[1]
            image_format = get_image_format(image_type)

            back_image.system_image.save(
                file_name.format("LayoutSlide_" if is_layout else "", slideIndex, image_type), 
                image_format)

上記の両方のコードサンプルは、メソッドget \ image \ formatを使用します。このメソッドは、指定されたタイプに適切な画像形式を返します。そのメソッドの実装を以下に示します。

import aspose.slides as slides
import aspose.pydrawing as drawing

def get_image_format(image_type):
    return {
        "jpeg": drawing.imaging.ImageFormat.jpeg,
        "emf": drawing.imaging.ImageFormat.emf,
        "bmp": drawing.imaging.ImageFormat.bmp,
        "png": drawing.imaging.ImageFormat.png,
        "wmf": drawing.imaging.ImageFormat.wmf,
        "gif": drawing.imaging.ImageFormat.gif,
    }.get(image_type, drawing.imaging.ImageFormat.jpeg)

無料ライセンスを取得する

無料の一時ライセンスを取得して、評価の制限なしに.NET経由でAspose.Slides for Pythonを使用できます。

結論

この記事では、PythonでPowerPointプレゼンテーションから画像を抽出する方法を学びました。また、図形とスライドの背景からの画像の抽出についても個別に説明しました。さらに、ドキュメントにアクセスすると、Python用のAspose.Slidesの詳細を調べることができます。また、フォーラムから質問することもできます。

関連項目

情報:Asposeは、プレゼンテーションのスライドに基づいて画像を生成できるPowerPointから画像へのコンバーター(PPTからJPGおよび[PPTからPNG][])を提供します。