1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでPowerPointの画像を抽出

1
Posted at

日常の業務において、PowerPointファイル内の画像を再利用したい場面は多く見られます。複数のプレゼンテーションで同じ画像を繰り返し使用する場合、元のPPTから一括で画像を抽出・保存することで、素材の収集やダウンロードといった煩雑な作業を削減できます。

また、PPT内の重要な画像を個別に出力してローカルへバックアップしておけば、元ファイルの破損や紛失によるデータ損失を未然に防ぐことが可能です。本記事では実務で活用できるコードを用い、Pythonを使ってPowerPointから画像を高速抽出する2つの方法を紹介します。

無料Pythonライブラリ

本機能の実装には、無料のオフィス文書処理ライブラリFree Spire.Presentation for Pythonを使用します。
本ライブラリはPPT・PPTX形式に完全対応しており、文書作成・編集・フォーマット変換・リソース抽出など、各種基本操作に対応しています。
下記のpipコマンドを実行するだけで、簡単にインストールできます。

pip install Spire.Presentation.Free

1. Pythonで指定したスライド内の画像を抽出

特定のスライドのみから画像を出力したい場合は、スライド内の図形要素を走査し、画像オブジェクトを判別することで高精度に抽出できます。

PPTに挿入されている画像は主にSlidePicturePictureShapeの2種類に分類されます。コード内でオブジェクトの型を判定し、各種類に対応したメソッドを呼び出して画像を保存する必要があります。

実装手順

  1. LoadFromFile()メソッドを実行し、ローカルのPPTファイルを読み込む
  2. スライドインデックスPresentation.Slides[index]を指定し、対象のスライドを取得
  3. 対象スライド内の全ての図形オブジェクトを走査
  4. オブジェクトの種別を判定し、画像要素を検出したら専用メソッドでファイルに保存

完全コード例

from spire.presentation.common import *
from spire.presentation import *

# ローカルPPTファイルを読み込み
ppt = Presentation()
ppt.LoadFromFile("input.pptx")

# 1枚目のスライドを取得(インデックスは0から開始)
slide = ppt.Slides[0]

img_index = 0
# スライド内の全図形オブジェクトを走査
for shape in slide.Shapes:
    # SlidePicture形式の画像を抽出
    if isinstance(shape, SlidePicture):
        shape.PictureFill.Picture.EmbedImage.Image.Save(f"幻灯片图片/幻灯片图_{img_index}.png")
        img_index += 1

    # PictureShape形式の画像を抽出
    if isinstance(shape, PictureShape):
        shape.EmbedImage.Image.Save(f"Output/slide_{img_index}.png")
        img_index += 1

# リソースを解放
ppt.Dispose()

ExtractSlideImage.png

2. PythonでPPTファイル内のすべての画像を抽出

PPT全体の画像を一括で出力したい場合は、スライドを1ページずつ走査する必要はありません。
ドキュメント全体の画像リソースを一括取得できるため、処理が簡潔で処理速度にも優れ、大量の素材抽出作業に適しています。

実装手順

  1. 対象のPowerPointファイルを読み込む
  2. Presentation.Imagesプロパティから、ファイル内の全画像データを取得
  3. 画像コレクションをループ処理し、任意のフォルダへ一括保存

完全コード例

from spire.presentation.common import *
from spire.presentation import *

# PPTファイルを読み込み
ppt = Presentation()
ppt.LoadFromFile("input.pptx")

# ファイル内の全画像を走査し一括出力
for idx, img_data in enumerate(ppt.Images):
    save_path = f"ExtractImage/Images_{idx}.png"
    img_data.Image.Save(save_path)

# プログラムが占有したリソースを解放
ppt.Dispose()

ExtractPPTimage.png

まとめ

以上2つのシンプルで効率的なPythonコードを活用することで、様々な用途に応じたPowerPointの画像抽出に対応できます。
特定スライドからの個別抽出は素材の再利用に、ファイル全体の一括抽出はデータの完全バックアップに適しています。

プログラムによる自動処理を導入することで、手動での別名保存やスクリーンショットといった非効率な作業をなくし、業務効率を大幅に向上させられます。
PPT内の視覚素材を一元管理し、今後の二次活用にも役立てることができます。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?