概要
パワポの中心に画像を貼るpythonスクリプトです。
画像を1スライド1枚ずつ貼り付けたパワーポイントを作成します。
画像を任意の大きさで貼ることができます。
#コード
from PIL import Image
from pptx import Presentation
from pptx.util import Cm
import os
#スライドサイズ
#4:3 (default) 9144000x6858000
#16:9 12193200x6858000
SLIDE_WIDTH, SLIDE_HEIGHT = 9144000, 6858000
#出力ファイル名
OUTPUT_FILE_PATH = "test.pptx"
#画像の格納ディレクトリ
IMG_DIR = "./image_file/"
#今回は高さ15cmで貼り付け
IMG_DISPLAY_HEIGHT = Cm(15)
#受け取ったプレゼンテーションオブジェクトにスライドを追加し、追加されたスライドオブジェクトを返す。
def add_slide(prs):
#白紙スライドの追加(ID=6は白紙スライド)
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
return slide
#画像をスライド中心に貼り付ける
def add_picture(slide, img_file):
#画像サイズを取得してアスペクト比を得る
im = Image.open(img_file)
im_width, im_height = im.size
aspect_ratio = im_width/im_height
#表示された画像のサイズを計算
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height
#センタリングする場合の画像の左上座標を計算
left = ( SLIDE_WIDTH - img_display_width ) / 2
top = ( SLIDE_HEIGHT - img_display_height ) / 2
#画像をスライドに追加
slide.shapes.add_picture(img_file, left, top, height = IMG_DISPLAY_HEIGHT)
#スライドオブジェクトの定義
prs = Presentation()
#スライドサイズの指定
prs.slide_width = SLIDE_WIDTH
prs.slide_height = SLIDE_HEIGHT
#img画像のファイル名を取得
img_files = os.listdir(IMG_DIR)
#jpegで終了するファイル名のみ抽出。貼り付けたい画像の拡張子に応じて変える
img_files = [name for name in img_files if name.endswith(".jpeg")]
#昇順にソート(この順番でスライドに貼り付けられる)
img_files.sort()#昇順にsort
for name in img_files:
path = IMG_DIR + name
slide = add_slide(prs)
add_picture(slide, path)
#pptxファイルを出力する
prs.save(OUTPUT_FILE_PATH)
#参考記事
スライドに目いっぱいの大きさで画像を貼りたいなら、こちらの記事が良いです。
画像の大きさ変えなくてもいいよ、という人なら是非このスクリプトを。
本スクリプトはこれらの記事の組み合わせで作成させていただきました。
ありがとうございます。
#組み合わせると良いかもしれないプログラム
https://khufrudamonotes.com/pdf-to-image-python
PDFを画像にしたい方は、このスクリプトが参考になります。
画像のトリミング範囲を大まかに知りたい方はこちらを使うと上手くいくかと。