
PowerPoint の資料にロゴや製品写真、説明用の図を追加する作業は、Python で自動化できます。画像の保存場所に応じて、ローカルファイルを読み込む方法と、URL から画像を取得する方法を使い分けると、資料作成の処理に組み込みやすくなります。
この記事では、Spire.Presentation for Python を使用し、既存の PowerPoint ファイルの最初のスライドに画像を挿入する方法を紹介します。どちらの方法でも、画像をプレゼンテーションの画像コレクションに追加してから、位置とサイズを指定してスライドに配置します。
Spire.Presentation for Python のインストール
Spire.Presentation for Python は、PowerPoint ファイルの作成、読み込み、編集、変換を行うためのライブラリです。Microsoft PowerPoint をインストールせずに、スライド内のテキストや図形、画像などを操作できます。
次のコマンドでインストールします。
pip install Spire.Presentation
または、Spire.Presentation for Python のダウンロードページ から手動でライブラリをインストールすることもできます。
今回の例では、画像の読み込みに Spire の Stream クラスを使用するため、Pillow は不要です。URL からの取得には、Python 標準ライブラリの urllib.request を使用します。
実行前に、入力用の input.pptx を用意してください。ローカル画像の例では、挿入する logo.png も必要です。コード内のパスは、使用する環境に合わせて変更します。
ローカルファイルから PowerPoint に画像を挿入する
ディスクに保存した画像は、ファイルパスを指定して Stream オブジェクトを作成し、Images.AppendStream() でプレゼンテーションに追加します。
続いて、画像データと配置領域を AppendEmbedImageByImageData() に渡し、スライドに画像を挿入します。
操作手順
Presentationオブジェクトを作成し、既存の PowerPoint ファイルを読み込みます。- ローカル画像から
Streamを作成し、画像コレクションに追加します。 - 画像の幅と高さを取得し、配置位置を指定します。
- 最初のスライドに画像を挿入し、枠線を非表示にします。
- 別名で保存し、リソースを解放します。
サンプルコード
from spire.presentation.common import *
from spire.presentation import *
# プレゼンテーションを作成し、ファイルを読み込む
presentation = Presentation()
presentation.LoadFromFile(
r"C:\Users\Administrator\Desktop\input.pptx"
)
# ローカル画像からストリームを作成する
stream = Stream(
r"C:\Users\Administrator\Desktop\logo.png"
)
# 画像コレクションに追加する
image = presentation.Images.AppendStream(stream)
# 画像の幅と高さを取得する
width = image.Width
height = image.Height
# 画像の配置位置を指定する
x = 500
y = 100
# 最初のスライドを取得する
slide = presentation.Slides[0]
# 指定した位置とサイズで画像を挿入する
rect = RectangleF.FromLTRB(x, y, x + width, y + height)
image_shape = slide.Shapes.AppendEmbedImageByImageData(
ShapeType.Rectangle, image, rect
)
# 画像の枠線を非表示にする
image_shape.Line.FillType = FillFormatType.none
# プレゼンテーションを保存する
presentation.SaveToFile(
"InsertImageFromPath.pptx", FileFormat.Pptx2010
)
# リソースを解放する
presentation.Dispose()
stream.Close()
Slides[0] は最初のスライドを表します。別のスライドに挿入する場合は、対象のインデックスに変更してください。インデックスは 0 から始まります。

URL から PowerPoint に画像を挿入する
Web 上の画像を挿入する場合は、まず画像のバイナリデータを取得します。そのデータを Spire の Stream に渡せば、以降はローカル画像と同じ手順で配置できます。この例では、取得した画像を一時ファイルとして保存せず、メモリ上で処理します。
操作手順
- 既存の PowerPoint ファイルを読み込みます。
- 画像 URL にリクエストを送信し、画像データを取得します。
- 取得したバイト列から
Streamを作成し、画像コレクションに追加します。 - 最初のスライドに画像を挿入し、枠線を非表示にします。
- 別名で保存し、リソースを解放します。
サンプルコード
from urllib.request import Request, urlopen
from spire.presentation.common import *
from spire.presentation import *
# プレゼンテーションを作成し、ファイルを読み込む
presentation = Presentation()
presentation.LoadFromFile(
r"C:\Users\Administrator\Desktop\input.pptx"
)
# URL から画像データを取得する
image_url = "https://i.imgur.com/OygmMoN.png"
request = Request(
image_url,
headers={"User-Agent": "Mozilla/5.0"}
)
with urlopen(request, timeout=30) as response:
image_bytes = response.read()
# 画像のバイト列からストリームを作成する
stream = Stream(image_bytes)
# 画像コレクションに追加する
image = presentation.Images.AppendStream(stream)
# 画像の幅と高さを取得する
width = image.Width
height = image.Height
# 画像の配置位置を指定する
x = 500
y = 100
# 最初のスライドを取得する
slide = presentation.Slides[0]
# 指定した位置とサイズで画像を挿入する
rect = RectangleF.FromLTRB(x, y, x + width, y + height)
image_shape = slide.Shapes.AppendEmbedImageByImageData(
ShapeType.Rectangle, image, rect
)
# 画像の枠線を非表示にする
image_shape.Line.FillType = FillFormatType.none
# プレゼンテーションを保存する
presentation.SaveToFile(
"InsertImageFromUrl.pptx", FileFormat.Pptx2010
)
# リソースを解放する
presentation.Dispose()
stream.Close()
image_url には、画像ファイルを直接取得できる URL を指定します。画像を掲載している HTML ページの URL ではなく、画像データを返す URL が必要です。
この例では User-Agent ヘッダーと 30 秒のタイムアウトを設定しています。ただし、ヘッダーを追加しても、配信元によるアクセス制限を必ず回避できるわけではありません。HTTP 429 が返された場合は、連続して再試行せず、時間を置くか、アクセス可能な別の画像 URL に変更してください。

画像の位置とサイズを調整する
どちらの例でも、次のコードで画像の配置領域を指定しています。
rect = RectangleF.FromLTRB(x, y, x + width, y + height)
FromLTRB() に渡す値は、左端、上端、右端、下端の座標です。x と y を変更すると位置を、width と height を変更すると表示サイズを調整できます。スライド上の座標とサイズはポイント単位で指定します。
上記のサンプルでは画像データから取得した幅と高さをそのまま配置サイズに使用しています。画像によってはスライドの外にはみ出すため、実際の資料ではスライドの大きさと配置位置に合わせて調整してください。
例えば、縦横比を維持したまま表示幅を 180 ポイントにする場合は、両方のサンプルのサイズ取得部分を次のように置き換えます。
# 縦横比を維持し、表示幅を 180 ポイントにする
width = 180
height = image.Height * width / image.Width
また、AppendStream() に渡すのは Spire の Stream オブジェクトです。Pillow の画像オブジェクトや io.BytesIO をそのまま渡さないようにしてください。
まとめ
Spire.Presentation for Python を使用すると、ローカルファイルと URL のどちらからでも PowerPoint に画像を挿入できます。ローカル画像はファイルパスから、URL の画像は取得したバイト列から Stream を作成します。その後は共通の処理で画像を追加し、位置やサイズを調整できます。
ロゴなどの固定素材にはローカルファイルを、外部から取得する画像には URL を利用すると、資料の作成手順に合わせた自動化が可能です。
無料トライアルライセンスの取得
Spire.Presentation for Python の機能を評価制限なしで体験したい場合は、30 日間無料トライアルライセンス を申請できます。






