スキャンした画像などを1つのPDFファイルにまとめたいことがあり、あるフォルダに含まれている画像を1つのPDFファイルにして出力するPythonプログラムを作ってみました。
プログラムの動作
Python スクリプトと同じディレクトリに「images」というフォルダを作成します。そのフォルダ内にPDFにしたい画像(JPEGもしくはPing形式)を入れておき、プログラムを実行するとmyImages.pdfというファイルが作成されます。


プログラムの内容
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import os from PIL import Image from glob import glob dir = './images' file_list = [] img_list = [] for f in glob(dir + "/*.*"): file_list.append(f) file_list.sort() for f in file_list: print(f) type = f[-3:] # 拡張子 if type in ('jpg', 'png'): # 画像ファイルのみ try: img = Image.open(f) img = img.convert('RGB') img_list.append(img) except Exception as e: print(e.args) img = img_list.pop(0) img.save(r'myImages.pdf', save_all=True, append_images=img_list) |
プログラムの説明
|
5 6 7 8 9 10 |
dir = './images' file_list = [] img_list = [] for f in glob(dir + "/*.*"): file_list.append(f) |
globでimagesフォルダにあるファイルのリストを取得します。
|
13 14 15 16 17 18 19 20 |
for f in file_list: print(f) type = f[-3:] # 拡張子 if type in ('jpg', 'png'): # 画像ファイルのみ try: img = Image.open(f) img = img.convert('RGB') img_list.append(img) |
リストに含まれるファイル名から拡張子を取り出し、それがjpgもしくはpngのときだけ、Imageモジュールで開きます。
19行目:pngファイルの場合、αチャンネル(透明色)が含まれている場合があるので、RGB形式に変換した後、画像データをリスト変数img_listに追加します。
|
24 25 |
img = img_list.pop(0) img.save(r'myImages.pdf', save_all=True, append_images=img_list) |
24行目:リストの先頭にあるデータをimgという変数に取り出します。
25行目:変数imgに残りの画像データをくっつける形でPDFファイルに保存しています。
次回はダイアログで画像ファイルを選択できるように、今回のプログラムを改良したものを紹介したいと思います。
- 投稿タグ
- プログラミング