【Python】自己动手实现一个带界面的自动抠图小程序

前面介绍了怎么利用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()

有什么问题欢迎留言讨论~

如果有什么不对的地方,敬请指正,谢谢!

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/107836371