最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

轉PDF初始代碼

從文件夾中讀取圖片數(shù)據(jù),然后將他們保存為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')

但這個有缺陷,部分圖片轉換過程有漏洞,經過多次實驗,發(fā)現(xiàn)部分圖片會出現(xiàn)這種錯誤:

ValueError: cannot save mode RGBA

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

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

但是在轉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 ,表示不用轉義字符,但是在弄成可執(zhí)行文件的時候,路徑是個參數(shù),不能加r了,因此,我寫了個函數(shù)把路徑這個字符串變成可以識別的路徑,這樣的路徑可以識別:

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, '\\')

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

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實現(xiàn)多張多格式圖片轉PDF并打包成exe的詳細內容,更多關于python圖片格式轉PDF打包exe的資料請關注腳本之家其它相關文章!

相關文章

  • python使用正則表達式的search()函數(shù)實現(xiàn)指定位置搜索功能

    python使用正則表達式的search()函數(shù)實現(xiàn)指定位置搜索功能

    SEARCH函數(shù),函數(shù)名。主要用來返回指定的字符串在原始字符串中首次出現(xiàn)的位置 ,從左到右查找,忽略英文字母的大小寫。接下來通過本文給大家介紹python使用正則表達式的search()函數(shù)實現(xiàn)指定位置搜索功能,需要的朋友一起看看吧
    2017-11-11
  • 最新評論

    大方县| 清徐县| 兴国县| 休宁县| 天水市| 鄂托克前旗| 朝阳市| 平顺县| 凉城县| 健康| 卢湾区| 桐城市| 海阳市| 瓦房店市| 万载县| 龙山县| 慈利县| 无为县| 寻甸| 南和县| 宕昌县| 云南省| 焦作市| 盐山县| 南岸区| 黄山市| 岗巴县| 长岛县| 元阳县| 泗洪县| 岚皋县| 安图县| 留坝县| 大安市| 增城市| 顺平县| 含山县| 永兴县| 资中县| 陕西省| 淮南市|