前言
开发环境
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()