鎮樓圖

文章目錄
- 一點想說的
- 必要配置
- removebg配置
- 安裝對應的 Python 庫
- 獲取API Key
- 無界面版
- 修改圖片背景色
- 修改圖片大小
- 升級版
- 設定視窗主題與標題
- 添加選擇圖片路徑組件
- 添加選擇保存路徑組件
- 添加選擇背景顏色組件
- 添加填寫圖片尺寸組件
- 添加填寫API-KEY組件
- 添加控制按鈕
- 添加輸出框顯示
- 設定組件位置
- 設定組件樣式
- 原始碼打包
- ??原始碼獲取方式??
一點想說的
想當年我不會Python的時候,做個證件斬訓要下 XX證件照 軟體,每次5元,感覺血虧,現在長本事了,自己做證件照,XX證件照 拜拜了您嘞~
必要配置
確保下面的庫都已安裝,
主要涉及到的庫:
tkinter:實作 GUI 編程(文本框、按鈕、標簽等組件實作 GUI 開發),
PIL:第三方影像處理庫,十分強大,由于使用人數龐大再加上確實牛,幾乎已經被認為是 Python 官方影像處理庫,
pathlib:面向物件的編程方式來表示檔案系統路徑,
ttkthemes:tkinter 主題包,讓你的組件外觀更加騷,
Pyinstaller:是一個非常簡單的打包 .py 檔案的庫,
removebg:看名字就知道,專門摳圖的庫,
removebg配置
安裝對應的 Python 庫
pip install -i https://pypi.douban.com/simple removebg
獲取API Key
進入 Removebg 官網,完成賬號注冊,

填寫完注冊資訊后,會發送驗證郵件到你的郵箱,點擊進入后會進入如下界面,

點擊 Remove image background

再點擊紅圈中的 Tool & API

點擊 Get API Key,

點擊 Show 即可查看 API Key 了,最好記下來哦,之后代碼中會用到,

無界面版
修改圖片背景色
使用 RemoveBg 時必須指定 api-key 與 error.log(保存報錯資訊的檔案),去掉背景之后會在原圖片同級檔案夾內生成一張 xxx_no_bg.png 的圖片,再創建一個指定顏色的背景板,將摳出來的圖粘貼到背景板上,
# 修改照片背景色
def replace_bg(read_path, save_path, api_key, bg_color='blue'):
# 在程式當前目錄創建一個error.log檔案來保存錯誤資訊(必要引數)
Path('error.log').touch()
rmbg = RemoveBg(api_key, 'error.log')
# 執行后會在 read_path 同級檔案夾內生成一張 xxx_no_bg.png 的圖片
rmbg.remove_background_from_img_file(read_path)
img_no_bg = Image.open(read_path + '_no_bg.png')
# 創建一個新的影像,RGB代表真色彩,3通道,
# color可以為顏色英文名 red 或是 十六進制顏色代碼 #00FF00
new_img = Image.new('RGB', img_no_bg.size, color=bg_color)
# 將沒有背景的影像粘貼到含背景色的影像上
new_img.paste(img_no_bg, (0, 0, *img_no_bg.size), img_no_bg)
new_img.save(save_path)
修改圖片大小
讀取圖片,直接使用 resize 修改圖片尺寸,Image.ANTIALIAS 設定為高質量,
# 修改照片尺寸295x413(標準一寸)
def change_size(read_path, save_path, width=295, height=413):
image = Image.open(read_path)
resized_image = image.resize((int(width), int(height)), Image.ANTIALIAS)
resized_image.save(save_path)
升級版
設定視窗主題與標題
這里使用的主題時 adapta,官方推薦,樣式很好看,
window = ThemedTk(theme="adapta", fonts=True, themebg=True)
window.title('證件照生成器')
添加選擇圖片路徑組件
選擇待修改圖片的路徑,
def selectFilePath():
global img_path
# 選擇檔案path接收檔案地址
img_path = Path(filedialog.askopenfilename(title='選擇原圖片'))
x, y = Image.open(img_path).size
entry4.insert(0, str(x) + 'x' + str(y))
path1.set(img_path)
path1 = tk.StringVar()
entry1 = ttk.Entry(window, textvariable=path1, width=30)
entry1.insert(0, '格式要求png')
button1 = ttk.Button(window,width=10, text = "圖片路徑", command = selectFilePath)

添加選擇保存路徑組件
選擇修改后圖片的保存路徑,該路徑為檔案夾,
def selectDirPath():
global dir_path
# 選擇檔案path接收檔案地址
dir_path = Path(filedialog.askdirectory(title='選擇圖片保存路徑'))
path2.set(dir_path)
path2 = tk.StringVar()
entry2 = ttk.Entry(window, textvariable=path2, width=30)
button2 = ttk.Button(window,width=10, text = "保存路徑", command = selectDirPath)

添加選擇背景顏色組件
這里使用tkinter 的 colorchooser 來當作顏色板,不得不說,實在是太好用了 ,
def ChooseColor():
global bg_color
# 回傳兩種格式的顏色代碼,這里只保存十六進制的
_, bg_color = colorchooser.askcolor(title='顏色選擇器')
path3.set(bg_color)
path3 = tk.StringVar()
entry3 = ttk.Entry(window, textvariable=path3, width=30)
button3 = ttk.Button(window, text='背景顏色', command=ChooseColor)


添加填寫圖片尺寸組件
如果要修改圖片的話,就填寫這一欄,默認為原圖尺寸,這里如果想要標準尺寸的話,建議先自己百度一下,如標準一寸就是295x413(標準一寸),
# 設定圖片大小,默認原圖大小,格式如295x413(標準一寸)
label = ttk.Label(window, text='默認原圖大小,若要修改請按[]內\
格式,如 [295x413] (標準一寸照)', wraplength=200, style='two.TLabel')
entry4 = ttk.Entry(window, width=30)
label1 = ttk.Label(window, text='圖片尺寸', style='three.TLabel')

添加填寫API-KEY組件
將輸入框設定顯示值為 “*”,可以達到隱藏顯示值的效果,這里就要填寫上面獲取的 api-key 了,
# 填寫api-key
entry5 = ttk.Entry(window, width=30, show="*")
label2 = ttk.Label(window, text='api-key', style='three.TLabel')

添加控制按鈕
- 修改背景按鈕:只修改原圖的背景圖,需要指定原圖路徑,保存路徑,背景顏色等,
- 修改尺寸按鈕:只修改原圖的尺寸,需要指定原圖路徑,保存路徑,圖片尺寸等,
- 同時修改按鈕:同時修改原圖的尺寸與背景,需要指定原圖路徑,保存路徑,圖片顏色(可選),圖片尺寸(可選),如果未選擇顏色,尺寸則默認藍底,圖片尺寸為295x413(標準一寸),
# 添加“同時修改”按鈕
button4 = ttk.Button(window, text = "同時修改", command=change_bg_size)
# 添加“修改背景”按鈕
button5 = ttk.Button(window, text = "修改背景", command=replace_bg)
# 添加“修改尺寸”按鈕
button6 = ttk.Button(window, text = "修改尺寸", command=change_size)

添加輸出框顯示
顯示運行結果資訊,
# 添加輸出框顯示
tree = ttk.Treeview(height=1, show=("tree", "headings"))

設定組件位置
這里使用 grid() 來設定位置,也可以用 pick() ,但個人更傾向于前者,
main_label.grid(row = 0, column = 0, pady=5)
entry1.grid(row = 1, column = 0, pady=5)
button1.grid(row = 1, column = 1, padx=20)
entry2.grid(row = 2, column = 0, pady=5)
button2.grid(row = 2, column = 1, padx=20)
entry3.grid(row = 3, column = 0, pady=5)
button3.grid(row = 3, column = 1, padx=20)
label.grid(row = 4, column = 0, pady=5)
entry4.grid(row = 5, column = 0, pady=5)
label1.grid(row = 5, column = 1, pady=5)
entry5.grid(row = 6, column = 0, pady=5)
label2.grid(row = 6, column = 1, pady=5)
button4.grid(row = 7, column = 1, padx=5)
button5.grid(row = 7, column = 0, padx=5)
button6.grid(row = 8, column = 0, padx=5)
tree.grid(row=9, column=0, pady=5)
設定組件樣式
再原組件的基礎上修改自己喜歡的樣式,
label_style = ttk.Style()
label_style.configure("one.TLabel", font=("微軟雅黑", 16, 'bold'), foreground="red", background="yellow")
label_style1 = ttk.Style()
label_style1.configure("two.TLabel", font=("微軟雅黑", 9), foreground="blue", background="yellow")
label_style2 = ttk.Style()
label_style2.configure("three.TLabel", font=("微軟雅黑", 10), foreground="blue", background="yellow")

原始碼打包
雖然之前的文章中已經介紹過很多次打包的方法,但為了新讀者,還是再來簡單講解一下,
首先要確保已經安裝 pyinstaller,沒有安裝的可以先安裝一下,
pip install -i https://pypi.douban.com/simple pyinstaller
pyinstaller 使用時的常用引數含義:
-F:打包單個檔案,產生一個檔案用于部署(默認),如果代碼都寫在一個
.py檔案時使用,專案有多個檔案時不要使用pyinstaller -F xxx.py-D:打包多個檔案,產生一個目錄用于部署(默認),用于框架撰寫的代碼打包
pyinstaller -D xxx.py(專案入口檔案)–key=keys:使用
keys進行加密打包pyinstaller --key=123456 -F xxx.py-d:產生
debug版本的可執行檔案-p:用來添加程式所用到的包的所在位置,設定匯入路徑,可以用
;( Linux 使用:)分割來指定多個目錄,-w:表示不用控制臺視窗,使用 Windows 子系統執行,當程式啟動的時候不會打開命令列(只對 Windows 有效)
-c:表示打開控制臺視窗,使用控制臺子系統執行,當程式啟動的時候會打開命令列(默認)(只對 Windows 有效)
-i:將 file.ico 添加為可執行檔案的資源,改變程式的圖示(只對 Windows 系統有效)
安裝完成后,新建一個檔案夾,將源檔案放到該檔案夾下面,打開cmd, cd 進入該檔案夾下(重點),執行下面陳述句

生成的檔案結構如下

exe 可執行檔案在 dist 目錄下

這就是本文所有的內容了,如果感徑訓不錯的話,? 點個贊再走吧!!!?
后續會繼續分享各種干貨,如果感興趣的話可以點個關注不迷路哦~,
??原始碼獲取方式??
像我這么寵粉的人~當然會給關注我的粉絲們億點小福利啦,關注下方小卡片,回復工具左上角的名稱即可獲取原始碼哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298932.html
標籤:其他

