前提・実現したいこと
pythonで複数のファイルから画像を取り出し、画像を横に結合させて別の場所に保存させるプログラムを作成しようとしています。
下記のプログラムは、結合させたい画像が入っているファイルと出力ファイルを自ら指定し、実行させています。
複数のフォルダにそれぞれ複数のファイルが存在しており、全てに同じ作業を行いたいです。
手動でファイルを選択するのはキリがなく、困っています。
同じフォルダにある複数のファイルから2つ選び画像結合させ、それぞれ異なるフォルダに保存する作業を全通り・全フォルダごとに行いたいのですが、何かアドバイスをいただけないでしょうか...
該当のソースコード
python
1import itertools 2from pathlib import Path 3from PIL import Image 4 5img_dir1 = Path("fiw/FIDs_NEW/F0001/MID1") # 左側の画像があるディレクトリ 6img_dir2 = Path("fiw/FIDs_NEW/F0001/MID2") # 右側の画像があるディレクトリ 7output_dir = Path("fiw/data/F1-12-5") # 出力ディレクトリ 8output_dir.mkdir(exist_ok=True) 9 10def concat_h(img1, img2, color="black"): 11 dst = Image.new( 12 "RGB", (img1.width + img2.width, max(img1.height, img2.height)), color 13 ) 14 dst.paste(img1, (0, 0)) 15 dst.paste(img2, (img1.width, 0)) 16 17 return dst 18 19for path1, path2 in itertools.product(img_dir1.iterdir(), img_dir2.iterdir()): 20 print(f"concat {path1} and {path2}") 21 img1 = Image.open(path1) 22 img2 = Image.open(path2) 23 24 dst = concat_h(img1, img2) 25 26 save_path = output_dir / f"{path1.stem}_{path2.stem}.jpg" 27 dst.save(save_path) 28 29 30 31 32def concat_h(img2, img1, color="black"): 33 dst = Image.new( 34 "RGB", (img2.width + img1.width, max(img2.height, img1.height)), color 35 ) 36 dst.paste(img2, (0, 0)) 37 dst.paste(img1, (img1.width, 0)) 38 39 return dst 40 41output_dir = Path("fiw/data/F1-21-5") # 出力ディレクトリ 42output_dir.mkdir(exist_ok=True) 43 44 45for path2, path1 in itertools.product(img_dir2.iterdir(), img_dir1.iterdir()): 46 print(f"concat {path2} and {path1}") 47 img1 = Image.open(path2) 48 img2 = Image.open(path1) 49 50 dst = concat_h(img1, img2) 51 52 save_path = output_dir / f"{path2.stem}_{path1.stem}.jpg" 53 dst.save(save_path)
試したこと
forを用いようと考えましたが、私の力不足でなかなか思いつかない状態です。
同じフォルダ内だけでも全通りの実行が出来るプログラムを作成したいです。
回答1件
あなたの回答
tips
プレビュー