Python证件照制作小程序源代码,可一键修改证件照背景及大小,采用removebg在线抠图工具进行自动抠图,程序中已提供默认apiKey(g79GjuedecMLVVwkfXWSLv26)。直接运行程序即可一键制作证件照。
核心程序代码
from PIL import Image
from removebg import RemoveBg
from pathlib import Path
from tkinter import ttk
from ttkthemes import ThemedTk
import tkinter as tk
from tkinter import filedialog, colorchooser
'''
removebg 的APIKEY:g79GjuedecMLVVwkfXWSLv26
'''
img_path = ''
dir_path = ''
bg_color = 'blue'
def change_bg_size():
try:
global img_path
img_path = replace_bg()
change_size()
# 在输出框显示提示信息
tree.heading("#0", text="成功修改背景与大小!")
except Exception as e:
# 显示错误信息
tree.heading("#0", text=e)
# 修改照片背景色
def replace_bg():
api_key = entry5.get()
# 在程序当前目录创建一个error.log文件来保存错误信息(必要参数)
Path('error.log').touch()
rmbg = RemoveBg(api_key, 'error.log')
# 执行后会在 read_path 同级文件夹内生成一张 xxx_no_bg.png 的图片
rmbg.remove_background_from_img_file(img_path)
img_no_bg = Image.open(Path(str(img_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)
save_path = Path(dir_path, str(img_path.name).split('.')[0] + 'replace_bg.png')
new_img.save(save_path)
return save_path
tree.heading("#0", text="图片已生成!")
# 修改照片尺寸
def change_size():
width, height = entry4.get().split('x')
image = Image.open(img_path)
resized_image = image.resize((int(width), int(height)), Image.ANTIALIAS)
resized_image.save(Path(dir_path, str(img_path.name).split('.')[0] + '_change_size.png'))
tree.heading("#0", text="尺寸修改成功!")
# change_bgcolor('证件.png', 'p1_bg.png', 'oRdiK39HgoxdFE1A8QbL7wpF', 'red')
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)
def selectDirPath():
global dir_path
# 选择文件path接收文件地址
dir_path = Path(filedialog.askdirectory(title='选择图片保存路径'))
path2.set(dir_path)
def ChooseColor():
global bg_color
# 返回两种格式的颜色代码,这里只保存十六进制的
_, bg_color = colorchooser.askcolor(title='颜色选择器')
path3.set(bg_color)
window = ThemedTk(theme="adapta", fonts=True, themebg=True)
window.title('证件照生成器——Python代码大全')
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")
# 设置选择图片路径组件
path1 = tk.StringVar()
entry1 = ttk.Entry(window, textvariable=path1, width=30)
entry1.insert(0, '格式要求png')
button1 = ttk.Button(window,width=10, text = "图片路径", command = selectFilePath)
# 设置选择文件保存路径组件
path2 = tk.StringVar()
entry2 = ttk.Entry(window, textvariable=path2, width=30)
button2 = ttk.Button(window,width=10, text = "保存路径", command = selectDirPath)
# 设置选择背景颜色组件
path3 = tk.StringVar()
entry3 = ttk.Entry(window, textvariable=path3, width=30)
button3 = ttk.Button(window, text='背景颜色', command=ChooseColor)
# 设置图片大小,默认原图大小,格式如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
moren = tk.StringVar(value='g79GjuedecMLVVwkfXWSLv26') #默认apiKey
entry5 = ttk.Entry(window, width=30, textvariable=moren,show="*")
label2 = ttk.Label(window, text='api-key', style='three.TLabel')
# 添加“同时修改”按钮
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"))
#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)
window.mainloop()
完整代码下载地址:
https://download.csdn.net/download/weixin_42756970/85474989
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
程序
+关注
关注
117文章
3782浏览量
80990 -
源代码
+关注
关注
96文章
2945浏览量
66725 -
python
+关注
关注
56文章
4792浏览量
84613
发布评论请先 登录
相关推荐
荣耀9什么时候上市最新消息:华为荣耀9发布时间确定6月12日,配置、外观设计、证件照、价格大曝光
今天,华为放出一张图,说下月12日有神秘新品发布,应该就是荣耀9了。今日荣耀9的证件照也在工信部正式露脸,大致的装备信息也浮出水面,汇集了曲面玻璃、双摄、麒麟960等特性。下面就来各种信息大汇总!
发表于 05-26 17:39
•4212次阅读
OPPO Reno证件照曝光,“铡刀式”前置摄像头抢眼
随着发布时间的临近,关于该机的消息越来越多,继上周该机的标准版入网工信部后,现在有最新消息,该机的证件照首次得到确认。
华为Mate20X5G证件照公布 业界首款SA/NSA5G双模手机
7月4日消息,工信部公布了华为Mate 20 X 5G证件照(型号为EVR-AN00),这是国行首款获得5G终端电信进网许可证的智能手机。
努比亚Flip 5G折叠屏手机证件照首曝,即将国内发售
近日,匿名科技公司于MWC2024上发布的努比亚Flip 5G折叠屏手机已在工业和信息化部网站上展示出其证件照片,预示着此款新品将在国内市场即将推出。
评论