详解python实现多张多格式图片转PDF并打包成exe

 更新时间:2023年01月05日 09:00:43   作者:_心灵骇客_  
这篇文章主要为大家介绍了python实现多张多格式图片转PDF并打包成exe方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

转PDF初始代码

从文件夹中读取图片数据,然后将他们保存为PDF格式。

不长,大概10行代码。

from PIL import Image
from os import *
def PictureToPDF(picture_path, name):
    pictures = []
    picture_file = listdir(picture_path)
    for file in picture_file:
        picture = Image.open(picture_path + '\\' + file)
        pictures.append(picture)
    pictures[0].save(picture_path + '\\' + name + '.pdf', "PDF", save_all=True, append_images=pictures)
PictureToPDF(r'C:\Users\Yezi\Desktop\Temp', 'test')

但这个有缺陷,部分图片转换过程有漏洞,经过多次实验,发现部分图片会出现这种错误:

ValueError: cannot save mode RGBA

我查询了许多资料并测试了很久,发现是图片格式色彩空间问题。

平常图片的颜色是RGB三种颜色,red红,green绿,blue蓝,但是png图片使用的是RGBA色彩空间,除了平常的RGB,多出来的A是alpha,是不透明度参数,有利于合成和融合图片。

但是在转PDF的过程,就不知道A怎么办,所以会出问题。

因此有下面的修改版,去掉A。

转PDF最终代码

与原来的相比,增加了一个判断语句,如果图片格式是png类型,那么就去掉里面的A。

from PIL import Image
from os import *
def PictureToPDF(picture_path, name):
    pictures = []
    picture_file = listdir(picture_path)
    for file in picture_file:
        picture = Image.open(picture_path + '\\' + file)
        if 'png' in file:
            r, g, b, a = picture.split()
            picture = Image.merge("RGB", (r, g, b))
        pictures.append(picture)
    pictures[0].save(picture_path + '\\' + name + '.pdf', "PDF", save_all=True, append_images=pictures)
PictureToPDF(r'C:\Users\Yezi\Desktop\Temp', 'test')

GUI界面设计代码

然后是加上GUI界面设计,这个问题就比较多,首先UI长这个样子:

p>整个页面的代码是这样的:

    window = tkinter.Tk()
    main = tkinter.Frame(window)
    main.grid(row=0, column=0)
    tkinter.Label(window, text='图片路径:').grid(row=0, column=0)
    pathEntry = tkinter.Entry(window, width=32)
    pathEntry.grid(row=0, column=1, columnspan=10)
    tkinter.Label(window, text='PDF名字:').grid(row=1, column=0)
    nameEntry = tkinter.Entry(window, width=32)
    nameEntry.grid(row=1, column=1, columnspan=10)
    tkinter.Button(window, text='开始转换', command=convert).grid(row=2, column=4)
    window.mainloop()

代码不长,我懒得解释了问题在于捕获路径的时候有一个问题,正常windows文件路径是这样的:

C:\Users\Yezi\Desktop\Python\PictureToPDF

但是这样是不能识别的,,因为 \ 会形成转义字符,所以我们在前面加了个r ,表示不用转义字符,但是在弄成可执行文件的时候,路径是个参数,不能加r了,因此,我写了个函数把路径这个字符串变成可以识别的路径,这样的路径可以识别:

C:/Users/Yezi/Desktop/Python/PictureToPDF

或者是这样的:

C:\\Users\\Yezi\\Desktop\\Python\\PictureToPDF

但是前面的比较好转,所以我就让它变成 / 这个:

    def convert():
        char = "\\"
        path = pathEntry.get()
        for it in path:
            if it in char:
                path = path.replace(it, '\\')

打包成可执行文件

win+R输入cmd打开命令提示行。

pip安装这个包。

pip install Pyinstaller

准备好图标和代码文件。

进入相应文件夹。

用这个命令(后面的图标名和文件名需要进行相应的修改哦)。

pyinstaller -F -i ./alpaca.ico PictureToPDF.py

然后等待……

完成之后到dist文件夹中找到这个程序,即可。

完整代码

import os
import PIL
import tkinter
def PictureToPDF(picture_path, name):
    pictures = []
    picture_file = os.listdir(picture_path)
    for file in picture_file:
        picture = PIL.Image.open(picture_path + '\\' + file)
        if 'png' in file:
            r, g, b, a = picture.split()
            picture = PIL.Image.merge("RGB", (r, g, b))
        pictures.append(picture)
    pictures[0].save(picture_path + '\\' + name + '.pdf', "PDF", save_all=True, append_images=pictures)
def GUI():
    def convert():
        char = "\\"
        path = pathEntry.get()
        for it in path:
            if it in char:
                path = path.replace(it, '\\')
        PictureToPDF(path, nameEntry.get())
    window = tkinter.Tk()
    main = tkinter.Frame(window)
    main.grid(row=0, column=0)
    tkinter.Label(window, text='图片路径:').grid(row=0, column=0)
    pathEntry = tkinter.Entry(window, width=32)
    pathEntry.grid(row=0, column=1, columnspan=10)
    tkinter.Label(window, text='PDF名字:').grid(row=1, column=0)
    nameEntry = tkinter.Entry(window, width=32)
    nameEntry.grid(row=1, column=1, columnspan=10)
    tkinter.Button(window, text='开始转换', command=convert).grid(row=2, column=4)
    window.mainloop()
GUI()

附录

os模块

os是用来处理文件和目录的。

os.listdir(path)

os.listdir(path)是用来返回path指定的文件夹包含的文件或文件夹的名字的列表。

str.lower()

str.lower()会返回将字符串中所有大写字符转换为小写后生成的字符串。

PIL模块

好像就是pillow。

Image.open(path+picture's full name)

Image.open()用来读取一张照片。

以上就是详解python实现多张多格式图片转PDF并打包成exe的详细内容,更多关于python图片格式转PDF打包exe的资料请关注脚本之家其它相关文章!

相关文章

  • 使用python制作一个解压缩软件

    使用python制作一个解压缩软件

    这篇文章主要介绍了python制作一个解压缩软件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python+PyQt5实现自动点击神器

    Python+PyQt5实现自动点击神器

    这篇文章主要为大家详细介绍了如何利用Python和PyQt5实现自动点击神器,旨在解决重复性的点击工作,解放双手,具有及时性和准确性,需要的可以参考下
    2024-01-01
  • 使用python检测手机QQ在线状态的脚本代码

    使用python检测手机QQ在线状态的脚本代码

    使用python检测手机QQ在线状态的脚本,有需要的朋友可以参考下
    2013-02-02
  • python怎么使用xlwt操作excel你知道吗

    python怎么使用xlwt操作excel你知道吗

    这篇文章主要为大家介绍了python使用xlwt操作excel的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • pandas DataFrame的修改方法(值、列、索引)

    pandas DataFrame的修改方法(值、列、索引)

    这篇文章主要介绍了pandas DataFrame的修改方法(值、列、索引),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python 添加用户设置密码并发邮件给root用户

    python 添加用户设置密码并发邮件给root用户

    这篇文章主要介绍了python 添加用户设置密码并发邮件给root用户的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • OpenCV特征提取与检测之Shi-Tomasi角点检测器

    OpenCV特征提取与检测之Shi-Tomasi角点检测器

    在角点检测的世界里哈瑞斯无疑是最重要的方法之一,但Shi-Tomasi作为改进的算法也有很大应用场景,尤其是动态跟踪用的还比较多,这篇文章主要给大家介绍了关于OpenCV特征提取与检测之Shi-Tomasi角点检测器的相关资料,需要的朋友可以参考下
    2021-08-08
  • 详解如何使用Python实现复制粘贴的功能

    详解如何使用Python实现复制粘贴的功能

    pandas 里面有一个 pd.read_clipboard 函数,可以根据你复制的内容生成DataFrame。本文就利用这个函数实现复制粘贴的功能,感兴趣的可以了解一下
    2023-01-01
  • 运行独立 pyspark 时出现 Windows 错误解决办法

    运行独立 pyspark 时出现 Windows 错误解决办法

    在本篇文章里小编给大家分享的是一篇关于运行独立 pyspark 时出现 Windows 错误解决办法,对此有需求的方法可以参考下。
    2021-12-12
  • Python实现二叉树的最小深度的两种方法

    Python实现二叉树的最小深度的两种方法

    这篇文章主要介绍了Python实现二叉树的最小深度的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论