hanson1025 发表于 2022-6-10 13:33

图片批量转PDF

之前论坛里找了几个,都会出现,如果图片是PNG的话,就错误提示“cannot save mode RGBA”,加了convert('RGB')也不行,试了好多方法,最终找到可以用的办法
学习PYTHON时间不长,代码有点乱
from PIL import Image
from tkinter import filedialog
import os

def to_pdf(folder_path):
    files = os.listdir(folder_path)
    img_files = []
    sources = []
    for file in files:
      if 'png' in file or 'jpg' in file:
            img_files.append(folder_path + file)
    img_files.sort()

    if 'png' in img_files:
      output1 = Image.open(img_files)
      output = Image.new('RGB',output1.size,(255,255,255))
      output.paste(output1,mask=output1.split())
      img_files.pop(0)
    elif 'jpg' in img_files:
      output = Image.open(img_files)
      img_files.pop(0)      
      
    for file in img_files:
      if 'png' in file:
            rgba_file = Image.open(file)
            rgb_file = Image.new('RGB',rgba_file.size,(255,255,255))
            rgb_file.paste(rgba_file, mask=rgba_file.split())
            sources.append(rgb_file)
      elif 'jpg' in file:
            img_file = Image.open(file)
            if img_file.mode == 'RGB':
                img_file = img_file.convert('RGB')
            sources.append(img_file)   
    pdf_file_path = filedialog.asksaveasfilename(title='请选择PDF文件保存目录',filetypes=[('PDF文件','.pdf')])
if pdf_file_path.endswith('.pdf') == False:
      pdf_file_path = pdf_file_path + '.pdf'
output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)

if __name__ == "__main__":
    img_dir = filedialog.askdirectory(title='请选择图片所在文件夹') + '/'
    to_pdf(img_dir)

wihn 发表于 2022-6-10 14:24

学习学习。提点小建议:判断图片类型最好根据文件头来判断,从文件名进行字符串比较有出错的可能。就算是要用文件名字符串来判断,最好是endswith('.jpg')这样,要不然文件夹里混入jpg.txt之类的会出错。

kvttt_2021 发表于 2022-6-10 20:51

shubiao05 发表于 2022-6-10 17:45
发现一个问题:

Traceback (most recent call last):


pdf_file_path这个变量没有赋值。

csjygywj 发表于 2022-6-10 13:50

我这里有一个图片批量处理软件,不过用代码自己做一个是高大上的。

Zien0103 发表于 2022-6-10 14:17

学习学习{:301_1008:}

jackie102 发表于 2022-6-10 15:03

学习了,日常使用还是用PDF自带的虚拟打印机,直接转PDF。

y29111150 发表于 2022-6-10 16:27

大佬真厉害

w92vv 发表于 2022-6-10 16:41

wihn 发表于 2022-6-10 14:24
学习学习。提点小建议:判断图片类型最好根据文件头来判断,从文件名进行字符串比较有出错的可能。就算是要 ...

厉害厉害,学习了

shubiao05 发表于 2022-6-10 17:45

发现一个问题:

Traceback (most recent call last):
File "E:\py_files\Py_office\pic_to_pdf\pic_to_pdf.py", line 35, in <module>
    if pdf_file_path.endswith('.pdf') == False:
NameError: name 'pdf_file_path' is not defined

不太明白这是哪方面的原因

kvttt_2021 发表于 2022-6-10 20:49

w92vv 发表于 2022-6-10 16:41
厉害厉害,学习了我写错地方了。
页: [1] 2
查看完整版本: 图片批量转PDF