前言

开发环境

windows 10
python 3.6.4

如何获取API

那么如果没有API密码的就点击下面的这个链接去注册一个吧,可以直接用QQ邮箱去注册的
https://www.remove.bg/r/mQ3JjqebsEWsi2vuu4fJqatC?locale=zh

小提一下

py是源代码,但是需要有python环境才能运行
exe是py文件打包成的可执行程序,这个不需要python环境就能运行
另外还有一个说明文档,这里是已我偶像的照片给大家演示的

初级版

直接上代码:

import tkinter as tk
import requests


class catout():
    def __init__(self):
        # tk.TK() 生成主窗口
        self.root = tk.Tk()

        # 给窗口命名一个名字
        self.root.title("智能抠图")

        # 创建应用程序的窗口大小
        self.root.geometry('%dx%d' % (400, 200))

        # tk.StringVar 跟踪变量的值变化,以保证值的变更随时显示在界面上   记录文本框里面的值
        self.image_name = tk.StringVar()
        self.API = tk.StringVar()
        self.status = tk.StringVar()

        # 布局组件
        self.page = tk.Frame()
        # 显示布局
        self.page.pack()
        # 调用组件
        self.create_page()

        # 调用组件的mainloop方法,进入事件的循环,显示窗体
        self.root.mainloop()

    def create_page(self):
        tk.Label(self.page).grid(row=0, stick=tk.W)
        # 显示图片名称的布局
        tk.Label(self.page, text="图片名称:").grid(row=1, stick=tk.W, pady=10)
        # 显示密码的单行文本框
        tk.Entry(self.page, textvariable=self.image_name).grid(row=1, column=1, stick=tk.E)

        # 显示api密钥的布局
        tk.Label(self.page, text="API密钥:").grid(row=2, stick=tk.W, pady=10)
        # 显示密码的单行文本框
        tk.Entry(self.page, textvariable=self.API).grid(row=2, column=1, stick=tk.E)

        tk.Button(self.page, text="开始", command=self.start).grid(row=3, column=1, stick=tk.E, pady=10)

        # 设置提示的文本
        tk.Label(self.page, textvariable=self.status).grid(row=4, column=1, stick=tk.E, pady=10)


        # 显示布局
        self.page.pack()

    def start(self):
        # 获取输入款的内容
        image_name = self.image_name.get()
        API = self.API.get()

        # 判断是否输入
        if image_name == '' and API == '':
            self.status.set('请输入图片名称和API密钥!')
            return
        else:
            # 把修改后的图片名称改为png格式
            new_image_name = ''
            for i in image_name:
                if i == '.':
                    break
                new_image_name += i
            new_image_name = new_image_name + '.png'
            # 去掉背景后的图片名称
            result_name = 'no-bg{}'.format(new_image_name)

            # 发起请求及获取响应
            response = requests.post(
                'https://api.remove.bg/v1.0/removebg',
                files={'image_file': open(image_name, 'rb')},
                data={'size': 'auto'},
                headers={'X-Api-Key': API},
            )
            # 保存图片
            if response.status_code == requests.codes.ok:
                with open(result_name, 'wb') as out:
                    out.write(response.content)
                    self.status.set('已完成!')
            else:
                print("Error:", response.status_code, response.text)
                self.status.set('出错了!{}{}'.format(response.status_code, response.text))

CO = catout()

升级版

直接上代码

import tkinter as tk
import requests
import os


class catout():
    def __init__(self):
        # 遍历该文件夹
        self.li_dir = os.listdir(os.getcwd())
        # 过滤掉不是图片的文件 和 已经处理过的图片
        self.image_list = []
        for i in self.li_dir:
            if ('jpg' in i) or ('png' in i) or ('jpeg' in i):
                if 'no-bg' not in i:
                    self.image_list.append(i)

        # tk.TK() 生成主窗口
        self.root = tk.Tk()

        # 给窗口命名一个名字
        self.root.title("智能抠图")

        # 创建应用程序的窗口大小
        self.root.geometry('%dx%d' % (500, 400))

        # tk.StringVar 跟踪变量的值变化,以保证值的变更随时显示在界面上   记录文本框里面的值
        self.image_name = tk.StringVar()
        self.API = tk.StringVar()
        self.status = tk.StringVar()
        self.Menu = tk.StringVar()

        self.Menu.set('请点击这里选择图片')
        om = tk.OptionMenu(self.root, self.Menu, *self.image_list)
        om.pack()

        # 布局组件
        self.page = tk.Frame()
        # 显示布局
        self.page.pack()
        # 调用组件
        self.create_page()

        # 调用组件的mainloop方法,进入事件的循环,显示窗体
        self.root.mainloop()

    def create_page(self):
        tk.Label(self.page).grid(row=0, stick=tk.W)
        # 显示图片名称的布局
        tk.Label(self.page, text="手动输入图片名称:").grid(row=1, stick=tk.W, pady=10)
        # 显示密码的单行文本框
        tk.Entry(self.page, textvariable=self.image_name).grid(row=1, column=1, stick=tk.E)

        # 显示api密钥的布局
        tk.Label(self.page, text="请输入API密钥:").grid(row=2, stick=tk.W, pady=10)
        # 显示密码的单行文本框
        tk.Entry(self.page, textvariable=self.API).grid(row=2, column=1, stick=tk.E)

        tk.Button(self.page, text="开始", command=self.start).grid(row=3, column=1, stick=tk.E, pady=10)

        # 设置提示的文本
        tk.Label(self.page, textvariable=self.status).grid(row=4, column=1, stick=tk.E, pady=10)


        # 显示布局
        self.page.pack()

    def start(self):
        # 获取输入款的内容
        image_name = self.image_name.get()
        API = self.API.get()
        Menu_image_name = self.Menu.get()

        # 判断是否输入
        if image_name != '' and API != '':
            # 把修改后的图片名称改为png格式
            new_image_name = ''
            for i in image_name:
                if i == '.':
                    break
                new_image_name += i
            new_image_name = new_image_name + '.png'
            # 去掉背景后的图片名称
            result_name = 'no-bg{}'.format(new_image_name)

            # 发起请求及获取响应
            response = requests.post(
                'https://api.remove.bg/v1.0/removebg',
                files={'image_file': open(image_name, 'rb')},
                data={'size': 'auto'},
                headers={'X-Api-Key': API},
            )
            # 保存图片
            if response.status_code == requests.codes.ok:
                with open(result_name, 'wb') as out:
                    out.write(response.content)
                    self.status.set('已完成!')
            else:
                print("Error:", response.status_code, response.text)
                self.status.set('出错了!{}{}'.format(response.status_code, response.text))
            return

        elif API != '' and Menu_image_name != '请点击这里选择图片':
            print(Menu_image_name)
            # 把修改后的图片名称改为png格式
            new_image_name = ''
            for i in Menu_image_name:
                if i == '.':
                    break
                new_image_name += i
            new_image_name = new_image_name + '.png'

            # 去掉背景后的图片名称
            result_name = 'no-bg{}'.format(new_image_name)

            # 发起请求及获取响应
            response = requests.post(
                'https://api.remove.bg/v1.0/removebg',
                files={'image_file': open(Menu_image_name, 'rb')},
                data={'size': 'auto'},
                headers={'X-Api-Key': API},
            )
            # 保存图片
            if response.status_code == requests.codes.ok:
                with open(result_name, 'wb') as out:
                    out.write(response.content)
                    self.status.set('已完成!')
            else:
                print("Error:", response.status_code, response.text)
                self.status.set('出错了!{}{}'.format(response.status_code, response.text))
            return

        else:
            self.status.set('请输入图片名称和API密钥!')
            return

CO = catout()