import os
import gc
def images_to_pdf(image_dir):
# 遍历所有子目录
for root, dirs, files in os.walk(image_dir):
image_files = [f for f in files if f.lower().endswith(('png', 'jpg', 'jpeg', 'bmp', 'gif'))]
image_files.sort() # 可选:对文件进行排序,以确保PDF中的页面顺序
# 如果当前目录中没有图片文件,则跳过
if not image_files:
continue
# 生成PDF文件名,以子目录名称命名
subdir_name = os.path.basename(root)
parent_dir = os.path.dirname(root)
output_pdf = os.path.join(parent_dir, f'{subdir_name}.pdf')
# 检查PDF是否已经存在
if os.path.exists(output_pdf):
print(f"PDF文件已存在,跳过:{output_pdf}")
continue
# 打开所有图片文件,并将其转换为RGB模式
images = []
for file in image_files:
img_path = os.path.join(root, file)
with Image.open(img_path) as img:
img = img.convert('RGB')
images.append(img.copy()) # 复制图像对象,释放原始图像资源
img.close() # 关闭原始图像文件
# 手动进行垃圾回收
gc.collect()
# 确保输出目录存在
os.makedirs(parent_dir, exist_ok=True)
# 保存图片为PDF文件
if images:
images[0].save(output_pdf, save_all=True, append_images=images[1:])
print(f"PDF文件已保存到 {output_pdf}")
else:
print(f"没有找到图片文件在目录 {root}")
# 手动进行垃圾回收
images.clear()
gc.collect()
# 示例使用
image_directory = input('请输入漫画目录地址: ')
images_to_pdf(image_directory)