獲取摳圖API密鑰
前往RemoveBg官網注冊一個賬號
RemoveBg官網:https://www.remove.bg/r/a9Dy3RhvgnKDphmsMbarJYrG
注冊賬戶界面已翻譯,Api每月可用50次
注冊成功后登錄,按圖示所選點擊
點擊 Get Api Key 獲取Api密鑰
安裝所需支持庫
import os, shutil from PIL import Image # 處理圖片換底色所需支持庫 from removebg import RemoveBg # 摳圖所需支持庫
如果電腦只安裝了python3原生軟件,則打開cmd命令窗口,分別輸入 pip install remoevbg 、pip install pillow(python2安裝:pip install PIL) 和 pip install shutil ,等待安裝成功即可
如果安裝了Anaconda,則只需安裝 removebg 庫,其它庫 Anaconda 已內置,我電腦安裝了python3.8和Anaconda,用Anaconda操作,相對較為簡單,接下來用Anaconda的Jupyter Notebook進行演示
主要代碼編寫
配置證件照所需更換底色
Background_Color = { 'Red': (255, 0, 0, 255), 'Blue': (67, 142, 219, 255), 'White': (255, 255, 255, 255) }
設置圖片路徑
pic = 'test.jpg' path = '%s' % os.getcwd()
進行摳圖
rmbg = RemoveBg("Your-RemoveBg-Api-Key", "error.log") # 密鑰,錯誤日志 rmbg.remove_background_from_img_file('%s\%s' % (path, pic)) # 摳圖
更換底色
background = Image.new('RGBA', foreground.size, Background_Color[Red]) # 背景圖,大小同前景圖 background.paste(foreground, mask = foreground) background.show() # 顯示圖片
background.save(os.getcwd() + '\\' + pic + "_no_bg.png") # 保存圖片
改進並完善程序代碼
該程序是比較簡陋的控制台程序,多處使用 print 打印輸出只是為什么更清楚的知道程序運行時到哪一步以及等待操作
import os, shutil from PIL import Image from removebg import RemoveBg # 證件照背景色 Background_Color = { 'Red': (255, 0, 0, 255), 'Blue': (67, 142, 219, 255), 'White': (255, 255, 255, 255) } pic = input("Tip:請將圖片移至當前所在目錄下!\n請輸入圖片文件名(含文件后綴):") # 圖片文件名 print("當前所在目錄:" + os.getcwd()) if os.path.exists('img'): print("\n當前目錄已存在img文件夾!!!") else: print("\n正在新建輸出目錄img ...") new_folder = '%s' % os.mkdir(os.getcwd() + '\\img') # 新建文件夾 print("輸出目錄img創建成功!!!\n") os.chdir('./img') # 切換至img目錄下 if os.path.exists(pic) == False: print("\n正在復制圖片至img文件夾......") shutil.copy('../' + pic, pic) print("目標圖片已復制到img文件夾!\n") path = '%s' % os.getcwd() # 當前所在路徑 print("當前目標圖片路徑:\t" + '%s\%s' % (path, pic)) # 輸出圖片所在路徑 # Api每月可用50次,降低同一張圖片重復摳圖頻率 if os.path.exists(pic + '_no_bg.png'): print("\n當前目錄已存在透明背景圖片" + pic + '_no_bg.png\n') else: print("\n正在生成錯誤日志(可不用理會)......") rmbg = RemoveBg("Your-RemoveBg-Api-Key", "error.log") # 密鑰,錯誤日志 print("正在進行摳圖......") rmbg.remove_background_from_img_file('%s\%s' % (path, pic)) # 摳圖 print("已生成透明背景圖片:" + pic + "_no_bg.png\n") select_bgColor = input("Tip:更換紅色背景按 r,更換藍色背景按 b,根管白色背景按 w \n請選擇需要更換的證件照底色:") # 選擇所需更換的底色 while True: if select_bgColor == 'r': color = 'Red' break elif select_bgColor == 'b': color = 'Blue' break elif select_bgColor == 'w': color = 'White' break else: select_bgColor = input("\n輸入有誤!請重新輸入:") foreground = Image.open(pic + '_no_bg.png') # 前景圖 background = Image.new('RGBA', foreground.size, Background_Color[color]) # 背景圖,大小同前景圖 background.paste(foreground, mask = foreground) print("\n正在展示圖片......") background.show() # 顯示圖片 print("正在保存圖片......\n") new_pic = pic + '_' + color + '.png' # 輸出文件名 background.save(os.getcwd() + '\\' + new_pic) # 保存圖片 print("輸出路徑為:" + os.getcwd()) os.chdir('../') # 切換回原工作目錄 print("\n保存成功!輸出文件為:" + new_pic + "\n\n按任意鍵退出\n") # 顯示保存圖片名 os.system('pause') # 按任意鍵繼續
- 圖片為網圖,僅作測試使用,可點擊圖片查看,摳圖出來的是透明背景色,有興趣的可以試試換成白色底,兩者有區別的
可以看出,摳圖的效果還是不錯的,比自己用PS要快,只需5秒左右
而且自己用PS摳圖要把頭發絲弄的這么精細還是有那么一點難度的
到這里,一個簡陋的照片摳圖換底色的小程序就完成了,當然,如果想把程序打包成exe文件,可以繼續往下看
將程序打包成exe文件
安裝支持庫
打開cmd,輸入 pip install PyInstaller ,等待安裝完成
當然也可以去網上下載模塊包 PyInstaller-3.6-py2.py3-none-any.whl ,切換到該離線模塊包目錄下,進行安裝
這里分享一個可以下載python大部分模塊的網站https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,進入網頁按 ctrl + F 輸入關鍵字可以查找所需模塊,點擊下載
找到目標 .py 文件
因為Jupyter Notebook編寫的python文件后綴是 .ipynb ,所以需要將其轉換為 .py 文件
按圖示所選下載 .py 文件,當然,如果是用python原生軟件編寫的,保存文件就是 .py 文件,無需轉換
然后切換至該 .py 文件所在目錄下,輸入pyinstaller -F Your_File_Name.py
然后就是耐心等待,打包成exe文件的過程比較久
這里先來了解一下pyinstaller的一些常用參數
-F, –onefile 打包一個exe文件,如果你的代碼都寫在一個.py文件的話,可以用這個,如果是多個.py文件就別用
-D, –onedir 打包多個文件,在dist中生成很多依賴文件,適合以框架形式編寫工具代碼,我個人比較推薦這樣,代碼易於維護
-d, –debug 產生debug版本的可執行文件
-w, –windowed, –noconsole 使用Windows子系統執行.當程序啟動的時候不會打開命令行(只對Windows有效)
-c, –nowindowed, –console 使用控制台子系統執行(默認)(只對Windows有效)
pyinstaller -c xxxx.py
pyinstaller xxxx.py --console
打包成功后會出現3個文件夾和一個文件
最后打包成功的.exe 文件在 dist 目錄下
點擊可以運行
需要注意的是:
- 由於是打包成單個 .exe 文件,所以程序是把代碼和支持庫的代碼打包在一起,所以程序會有點大,鑒於此,能用 from ... import ... ,就不用 import ...
- 其次是啟動也有點慢,啟動程序要5秒左右才顯示,當然,不同電腦等待時間也不一樣,請耐心等待,只有不是報錯或者直接關閉,是可以使用的
- 代碼是在Windows 10系統下編寫的,打包成 .exe 文件曾在虛擬機上的Windows 7系統上運行出現報錯,另一台Windows 10系統可以運行,就是等待時間較長