アラフォーおじさんの日常奮闘記

最近は多忙でバドミントンがご無沙汰になってきて、どちらかと言うと英語やプログラミング学習での気付きをシェアすることが多くなってきたブログ。

<python-pptx>複数のjpgファイルを1枚のpptスライドに並べるコードを作ってみた

こんにちは!

仕事柄、沢山の写真を撮影して、
パワーポイントに貼り付けて見比べることが結構あります。
1枚のスライドにたくさん並べるんですけど、
サイズ変換とか位置合わせとか、結構手間がかかります。
完全にルーチンワークなのですが、これがダルい!
今回はこの時間を短縮すべく、pythonでコードを書いてみました。
例えば15枚を並べると想定すると、
4~5分くらいかかる作業なのですが、ほんの数秒で終わります。
枚数が増えれば増えるほど更に効果が実感できます!

というわけでちょっとシェアしたいと思います。
こういうのが書けるようになってきたってことは
少しずつ勉強の成果が出てきたってことなのかな??


<注意点!>
・貼り付けたいpptをpyファイルと同じフォルダに入れてください。
・pyファイルの直下に「img」フォルダと「done」フォルダを作ってください。
 こんな感じ↓

・フォルダの説明
 「img」フォルダ:貼り付けたい写真(jpgのみ)を入れてください
 「done」フォルダ:ここに貼り付けた後のpptファイルが生成されます。
・画面サイズは16:9のみ現時点では想定しています。
 出来る人はちょっと下にあるコードを変更すれば4:3とかにも
 適用できるようになると思います。
 (いずれ、他のサイズにも適用できるように挑戦してみます)
・1枚のスライドに貼り付けられる枚数は15枚としています。
 16枚目以降は2枚目のスライドが作られて、
 それに貼り付けられます。
・imgフォルダに入っている順に貼り付けられるので、
 並び順にこだわりたい人はファイル名を工夫してください
 (例えば、ファイル名の先頭に数字をつけて、
 「1-●●.jpg」「2-●●.jpg」にするとか。)
python-pptxのインストールをお忘れなく。

###### 複数のjpgファイルを1枚のスライドに並べるコード ######

#### ライブラリのインポート ####
from pptx import Presentation
from glob import glob
from pptx.util import Cm


#### 設定 ####
# 追加したいパワーポイントの読み込み
# スライドのサイズはワイド画面(16:9)のみ想定
ppt_path = glob('*.pptx') 
ppt = Presentation(ppt_path[0])

# jpgの読み込み(imgフォルダの中身を読み込む)
fig = glob('./img/*.jpg')

# 写真サイズの設定
pic_height_cm = Cm(4.46)

# 写真間の距離設定
dist_left_cm = Cm(0.3)
dist_top_cm = Cm(0.5)

# 1枚目の位置(初期位置)の設定
initial_pic_left = Cm(1.63)
initial_pic_top = Cm(2.32)

#### pptへの貼り付け(1スライド最大15枚まで) #####
# 貼り付ける元となるレイアウトの指定(空白:6番)
slide_layout = ppt.slide_layouts[6]

# スライドの追加
slide = ppt.slides.add_slide(slide_layout)

# 貼り付け作業時に使用
count_i = 0
count_j = 0

for i in fig:   
    # 1列目への貼り付け作業
    # 画像の挿入
    pic = slide.shapes.add_picture(i, 0, 0,width=None, height=pic_height_cm)
    # 画像を移動
    pic.left = initial_pic_left + count_i * (dist_left_cm + pic.width)
    pic.top  = initial_pic_top + count_j * (dist_top_cm + pic.height)
    count_i += 1
    
    # 2列目以降に作業を移行するためにカウントを調整
    if count_i == 5:
        count_i = 0
        count_j += 1
        
    # 15枚貼り付けたときの処理
    if count_j == 3:
        # スライドの追加
        slide = ppt.slides.add_slide(slide_layout)
        count_i = 0
        count_j = 0

 
#### 保存 #####
ppt.save('done/d_' + ppt_path[0])

<||

(2023-02-09追記)
どんなスライドのサイズにも対応できるプログラムに改良したものを
別途作りました!需要あるかしら?