前回、複数の画像ファイルを1つのPDFファイルに変換するプログラムを作ってみました。今回はそれを改良して、任意のフォルダから画像ファイルを選択できるようにしました。またPDFファイルを保存するときも、任意の場所に好きな名前を付けて保存できるようにしました。
動作
プログラムを実行するとファイルを選択するダイアログが表示されます。複数のファイルも選択できます。

「開く」ボタンを押すと少し間をおいて保存ダイアログが開きますので、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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import os from PIL import Image import tkinter as tk from tkinter import filedialog as fd def file_open_dialog(): rt = tk.Tk() rt.withdraw() filenames = fd.askopenfilenames(title="ファイルを選択してください", filetypes=[("Image file", ".bmp .png .jpg .tif"), ("Bitmap", ".bmp"), ("PNG", ".png"), ("JPEG", ".jpg"), ("Tiff", ".tif") ], initialdir = os.getcwd()) rt.destroy() return filenames def file_save_dialog(): rt = tk.Tk() rt.withdraw() filename = fd.asksaveasfilename(initialfile="myImages.pdf", title="ファイルを保存してください", filetypes=[("", ".pdf")]) rt.destroy() return filename # ファイルを選択する file_list = file_open_dialog() img_list = [] for f in file_list: print(f) 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) # ファイルを保存する save_filename = file_save_dialog() if save_filename != "": img.save(save_filename, save_all=True, append_images=img_list) |
問題点
今回、PDFファイルにする画像を自分で選択できるようになりましたが、そのファイルの順番は勝手にソートされてしまいます。たとえば、「3.jpg、5.jpg、1.jpg、2.jpg」という順番で画像ファイルを選んだとしても、「1.jpg、2.jpg、3.jpg、5.jpg」という順番でPDFファイルになってしまいます。次回、この問題を解決する案を出してみたいと思います。
- 投稿タグ
- プログラミング