画像からPDFにするためのパッケージ img2pdf
が必要。
数字を自然順にソートするためのパッケージと関数 natsort
natsorted
が必要。
PNGファイルに透過チャンネルがある場合、 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel
というエラーが出る。アルファチャンネルを削除するための画像処理にOpenCV ライブラリを使った。このまま実行すると画像ファイルは上書きされてしまうので注意。
import img2pdf import glob from natsort import natsorted #自然順にするため import cv2 # 画像一覧を取得 lists = list(glob.glob("*.png")) # 透過チャンネルがある場合に削除する処理 for filename in lists: img = cv2.imread(filename,cv2.IMREAD_UNCHANGED) if img.shape[2] == 4: img2 = cv2.imread(filename,cv2.IMREAD_COLOR) cv2.imwrite(filename, img2) # PDFファイルを出力 outputpath = "file.pdf" with open(outputpath,"wb") as f: f.write(img2pdf.convert([str(i) for i in natsorted(lists) if ".png" in i]))
png
とjpg
の両方を取得する場合は "*.[pj][np][gg]"
JPEGファイルにはアルファチャンネルはないので、その部分を削除したコードは以下の通り
import img2pdf import glob from natsort import natsorted #自然順にするため import cv2 # 画像一覧を取得 lists = list(glob.glob("*.jpg")) # PDFファイルを出力 outputpath = "file.pdf" with open(outputpath,"wb") as f: f.write(img2pdf.convert([str(i) for i in natsorted(lists) if ".jpg" in i]))