前面介绍了怎么利用python抠除图片的背景,但是它还具有一定的局限性,比如说,我们要把要抠图的图片放到指定的路径下去,然后修改一下程序里面抠图的名称等等,这些都是有很多约束的。
下面的代码来改进一下程序,让它运行后我们可以自己选择要去除背景的图片,并且具有界面窗口和按钮,是不是看起来更加专业呢?! 还能根据不同图片格式进行筛选哦哦,简直像极了小程序,一起来看看吧~
界面化抠图程序
1、先睹为快
首先来看一下效果,就是下图当中这个白色窗口
2、实现原理
主要依赖Tkinter来实现本地窗口的,Tkinter是 Python的标准 TK GUI工具包的接口,它可以在大多数的Unix平台下使用,同样可以应用在 Windows和Macintosh系统里。Tk80的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
代码部分也不是很多很复杂
强调一下:里面的API接口密钥这在上一篇博客里面已经提到了,获取步骤也很简单,只需要登录注册就能找到你的专属API密钥:https://blog.csdn.net/weixin_44566432/article/details/107840109
包括抠图的程序介绍,下面很好理解,主要是设置窗口属性,以及完成选择和生成图片功能函数。
import os
from tkinter import Tk, Menu, Label, Button
from tkinter.filedialog import askopenfilenames
from tkinter.messagebox import showinfo
from removebg import RemoveBg
rmbg = RemoveBg('你的API接口密钥!!!', 'error.log')#!!!
def remove_bg(img_path):
rmbg.remove_background_from_img_file(img_path)
IMGPATH = ''
class GUI(object):
def __init__(self, window):
self.window = window
self.window.title('去除图片背景')
self.window.geometry('300x200')
menubar = Menu(self.window)
#定义空菜单
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='帮助', command=self.helpme)
filemenu.add_separator()
#显示
self.l = Label(window, text='')
self.l.pack(padx=5, pady=10) #固定窗口
#选择照片
btn1 = Button(window, text='选择照片', width=15, height=2, command=self.get_img)
btn1.pack()
#生成图片
self.send_btn = Button(window, text='去除背景', width=15, height=2, command=self.gen_img)
self.send_btn.pack()
def helpme(self):
showinfo('帮助', '请关注公众号,联系作者')
#选择图片
def get_img(self):
global IMGPATH
#选择文件
filenames = askopenfilenames(filetypes=(('jpeg img', '*.jpeg'),
('jpg img', '*.jpg'), ('png img', "*.png")
))
if len(filenames) > 0:
fnlist = [fn for fn in filenames]
fnstr = '\n'.join(fnlist)
self.l.config(text=fnstr)
IMGPATH = fnlist
else:
self.l.config(text='目前没有选择任何图片文件')
#生成图片
def gen_img(self):
global IMGPATH
respathlist = []
for imgpath in IMGPATH:
filepath, tempfilename = os.path.split(imgpath)
filename, extension = os.path.splitext(tempfilename)
remove_bg(imgpath)
respathlist.append(imgpath)
respath = ' '.join(respathlist)
showinfo('完成生成', f'图片处理完成,路径为: {respath}')
#创建窗口
window = Tk()
GUI(window)
#显示窗口,必须在所有控件后
window.mainloop()
有什么问题欢迎留言讨论~
如果有什么不对的地方,敬请指正,谢谢!