亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解python實(shí)現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe

 更新時(shí)間:2023年01月05日 09:00:43   作者:_心靈駭客_  
這篇文章主要為大家介紹了python實(shí)現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

轉(zhuǎn)PDF初始代碼

從文件夾中讀取圖片數(shù)據(jù),然后將他們保存為PDF格式。

不長(zhǎng),大概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')

但這個(gè)有缺陷,部分圖片轉(zhuǎn)換過(guò)程有漏洞,經(jīng)過(guò)多次實(shí)驗(yàn),發(fā)現(xiàn)部分圖片會(huì)出現(xiàn)這種錯(cuò)誤:

ValueError: cannot save mode RGBA

我查詢(xún)了許多資料并測(cè)試了很久,發(fā)現(xiàn)是圖片格式色彩空間問(wèn)題。

平常圖片的顏色是RGB三種顏色,red紅,green綠,blue藍(lán),但是png圖片使用的是RGBA色彩空間,除了平常的RGB,多出來(lái)的A是alpha,是不透明度參數(shù),有利于合成和融合圖片。

但是在轉(zhuǎn)PDF的過(guò)程,就不知道A怎么辦,所以會(huì)出問(wèn)題。

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

轉(zhuǎn)PDF最終代碼

與原來(lái)的相比,增加了一個(gè)判斷語(yǔ)句,如果圖片格式是png類(lèi)型,那么就去掉里面的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界面設(shè)計(jì)代碼

然后是加上GUI界面設(shè)計(jì),這個(gè)問(wèn)題就比較多,首先UI長(zhǎng)這個(gè)樣子:

p>整個(gè)頁(yè)面的代碼是這樣的:

    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='開(kāi)始轉(zhuǎn)換', command=convert).grid(row=2, column=4)
    window.mainloop()

代碼不長(zhǎng),我懶得解釋了問(wèn)題在于捕獲路徑的時(shí)候有一個(gè)問(wèn)題,正常windows文件路徑是這樣的:

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

但是這樣是不能識(shí)別的,,因?yàn)?\ 會(huì)形成轉(zhuǎn)義字符,所以我們?cè)谇懊婕恿藗€(gè)r ,表示不用轉(zhuǎn)義字符,但是在弄成可執(zhí)行文件的時(shí)候,路徑是個(gè)參數(shù),不能加r了,因此,我寫(xiě)了個(gè)函數(shù)把路徑這個(gè)字符串變成可以識(shí)別的路徑,這樣的路徑可以識(shí)別:

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

或者是這樣的:

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

但是前面的比較好轉(zhuǎn),所以我就讓它變成 / 這個(gè):

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

打包成可執(zhí)行文件

win+R輸入cmd打開(kāi)命令提示行。

pip安裝這個(gè)包。

pip install Pyinstaller

準(zhǔn)備好圖標(biāo)和代碼文件。

進(jìn)入相應(yīng)文件夾。

用這個(gè)命令(后面的圖標(biāo)名和文件名需要進(jìn)行相應(yīng)的修改哦)。

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

然后等待……

完成之后到dist文件夾中找到這個(gè)程序,即可。

完整代碼

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='開(kāi)始轉(zhuǎn)換', command=convert).grid(row=2, column=4)
    window.mainloop()
GUI()

附錄

os模塊

os是用來(lái)處理文件和目錄的。

os.listdir(path)

os.listdir(path)是用來(lái)返回path指定的文件夾包含的文件或文件夾的名字的列表。

str.lower()

str.lower()會(huì)返回將字符串中所有大寫(xiě)字符轉(zhuǎn)換為小寫(xiě)后生成的字符串。

PIL模塊

好像就是pillow。

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

Image.open()用來(lái)讀取一張照片。

以上就是詳解python實(shí)現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe的詳細(xì)內(nèi)容,更多關(guān)于python圖片格式轉(zhuǎn)PDF打包exe的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 查找python項(xiàng)目依賴(lài)并生成requirements.txt的方法

    查找python項(xiàng)目依賴(lài)并生成requirements.txt的方法

    今天小編就為大家分享一篇查找python項(xiàng)目依賴(lài)并生成requirements.txt的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python分布式編程實(shí)現(xiàn)過(guò)程解析

    python分布式編程實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了python分布式編程實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python讀取中文路徑時(shí)出錯(cuò)(2種解決方案)

    python讀取中文路徑時(shí)出錯(cuò)(2種解決方案)

    這篇文章主要介紹了python讀取中文路徑時(shí)出錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python 數(shù)據(jù)可視化pyecharts的使用詳解

    Python 數(shù)據(jù)可視化pyecharts的使用詳解

    這篇文章主要介紹了Python 數(shù)據(jù)可視化pyecharts的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • PyQt4實(shí)時(shí)顯示文本內(nèi)容GUI的示例

    PyQt4實(shí)時(shí)顯示文本內(nèi)容GUI的示例

    今天小編就為大家分享一篇PyQt4實(shí)時(shí)顯示文本內(nèi)容GUI的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • python實(shí)現(xiàn)剪切功能

    python實(shí)現(xiàn)剪切功能

    這篇文章主要為大家詳細(xì)介紹了一段python代碼編寫(xiě)實(shí)現(xiàn)的剪切功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    我們來(lái)學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過(guò)把數(shù)據(jù)加密。這樣即使被捕獲也無(wú)法獲取到數(shù)據(jù)的真實(shí)信息,今天我們就來(lái)學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • python實(shí)現(xiàn)k-means聚類(lèi)算法

    python實(shí)現(xiàn)k-means聚類(lèi)算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)k-means聚類(lèi)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 如何實(shí)現(xiàn)在jupyter notebook中播放視頻(不停地展示圖片)

    如何實(shí)現(xiàn)在jupyter notebook中播放視頻(不停地展示圖片)

    這篇文章主要介紹了如何實(shí)現(xiàn)在jupyter notebook中播放視頻(不停地展示圖片),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python中str is not callable問(wèn)題詳解及解決辦法

    Python中str is not callable問(wèn)題詳解及解決辦法

    這篇文章主要介紹了Python中str is not callable問(wèn)題詳解及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論