Python PyQt5结合Remove.bg API实现桌面级智能抠图工具
本文详细介绍如何使用Python PyQt5框架结合Remove.bg API,开发一款高效的桌面级图像抠图工具。内容涵盖API Key获取、界面UI布局设计、文件选择逻辑、API调用实现及样式美化,提供完整代码示例,帮助开发者快速掌握Python GUI编程与图像处理接口的集成方法。
简介
本文旨在通过一个小型实战项目,深入实践PyQt5框架的应用。该项目利用Remove.bg提供的API接口,实现自动去除人物照片背景的功能,并将这一核心能力封装为独立的桌面应用程序,便于日常使用。
1.获取API
首先访问Remove.bg官方网站。

在导航栏中找到并点击“工具”与“API”入口。

接着进入“API Docs”文档页面。

最后点击“Get API Key”按钮获取密钥,注意需先完成账号登录操作。


2.API使用方法
具体的API调用规范可在“API Docs”页面下方查阅。

3.可视化桌面制作
def ui_init(self):
self.setWindowTitle('抠图') # 设置窗口标题
self.resize(610,500) # 设置窗口大小
self.button = QPushButton('选择图片')
'''两个放置图片的Qlable'''
self.before_lable = QLabel()
self.before_lable.setToolTip('原来的图片') # 设置提示信息
self.before_lable.resize(300,400)
self.before_lable.setScaledContents(True) # 设置图片自适应窗口大小
self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
self.after_lable = QLabel()
self.after_lable.setToolTip('处理后的图片') # 设置提示信息
self.after_lable.resize(300,400)
self.after_lable.setScaledContents(True) # 设置图片自适应窗口大小
self.after_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
'''一条线'''
self.frame = QFrame()
self.frame.setFrameShape(QFrame.VLine|QFrame.Plain)
'''窗口布局'''
self.h_layout = QHBoxLayout()
self.v_layout = QVBoxLayout()
self.h_layout.addWidget(self.before_lable)
self.h_layout.addWidget(self.frame)
self.h_layout.addWidget(self.after_lable)
self.v_layout.addWidget(self.button)
self.v_layout.addLayout(self.h_layout)
self.widget = QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(self.v_layout)
通过调用setToolTip方法,为界面元素添加鼠标悬停时的提示信息。
self.before_lable.setToolTip('原来的图片') # 设置提示信息
利用setScaledContents方法,确保显示在before_lable控件上的图片能够根据窗口大小自动缩放适配。
self.before_lable.setScaledContents(True)
使用setFrameShape方法定义QLabel的边框形状。由于QFrame是QLabel的基类,因此可以直接调用QFrame的相关方法来设置样式。
self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
样式组合表

窗口整体布局结构如下: 主容器采用垂直布局,内部包含一个按钮和一个水平布局的子容器。 水平布局子容器中包含两个QLabel控件和一个QFrame分隔线。
4.逻辑实现
def file(self):
fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)') # 用来选择文件
if fname:
self.before_lable.setPixmap(QPixmap(fname)) # 将原来的图片显示在before_lable控件上
'''API调用'''
response = requests.post(
'https://api.remove.bg/v1.0/removebg',
files={'image_file': open(fname, 'rb')},
data={'size': 'auto'},
headers={'X-Api-Key': '你们自己的API Key'},
)
if response.status_code == requests.codes.ok:
with open('no-bg.png', 'wb') as f:
f.write(response.content)
try:
self.after_lable.setPixmap(QPixmap('./no-bg.png'))
except FileNotFoundError:
pass
使用QFileDialog.getOpenFileName方法让用户选择本地图片文件。该函数返回元组,其中第一个元素为选中的文件路径,即为我们需要的数据。
fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)') # 用来选择文件
5.美化
本示例仅对按钮控件进行了视觉美化处理。
def qss_init(self):
qss = '''
QPushButton{
border-radius: 6px;
border: none;
height: 25px;
color: white;
background: rgb(57, 58, 60);
}
QPushButton:enabled:hover{
background: rgb(230, 39, 39);
}
QPushButton:enabled:pressed{
background: rgb(255, 0, 0);
}
'''
self.setStyleSheet(qss) # 加载样式
6.信号与槽绑定
def connect_init(self):
self.button.clicked.connect(self.file)
7.全部代码
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QStatusBar, QWidget, QFileDialog, QLabel, QHBoxLayout, QVBoxLayout, QFrame, QMainWindow
from PyQt5.QtGui import QPixmap
import requests
class removebg(QMainWindow):
def __init__(self):
super(removebg,self).__init__()
self.ui_init()
self.qss_init()
self.connect_init()
def ui_init(self):
self.setWindowTitle('抠图')
self.resize(610,500)
self.button = QPushButton('选择图片')
self.before_lable = QLabel()
self.before_lable.setToolTip('原来的图片')
self.before_lable.resize(300,400)
self.before_lable.setScaledContents(True) # 设置图片自适应窗口大小
self.before_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
self.after_lable = QLabel()
self.after_lable.setToolTip('处理后的图片')
self.after_lable.resize(300,400)
self.after_lable.setScaledContents(True) # 设置图片自适应窗口大小
self.after_lable.setFrameShape(QFrame.Panel|QFrame.Plain)
self.frame = QFrame()
self.frame.setFrameShape(QFrame.VLine|QFrame.Plain)
self.h_layout = QHBoxLayout()
self.v_layout = QVBoxLayout()
self.h_layout.addWidget(self.before_lable)
self.h_layout.addWidget(self.frame)
self.h_layout.addWidget(self.after_lable)
self.v_layout.addWidget(self.button)
self.v_layout.addLayout(self.h_layout)
self.widget = QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(self.v_layout)
def file(self):
fname,a = QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
if fname:
self.before_lable.setPixmap(QPixmap(fname))
response = requests.post(
'https://api.remove.bg/v1.0/removebg',
files={'image_file': open(fname, 'rb')},
data={'size': 'auto'},
headers={'X-Api-Key': '7Uuo8dhdTHwSXUdjhKZP7h9c'},
)
if response.status_code == requests.codes.ok:
with open('no-bg.png', 'wb') as f:
f.write(response.content)
try:
self.after_lable.setPixmap(QPixmap('./no-bg.png'))
except FileNotFoundError:
pass
def connect_init(self):
self.button.clicked.connect(self.file)
def qss_init(self):
qss = '''
QPushButton{
border-radius: 6px;
border: none;
height: 25px;
color: white;
background: rgb(57, 58, 60);
}
QPushButton:enabled:hover{
background: rgb(230, 39, 39);
}
QPushButton:enabled:pressed{
background: rgb(255, 0, 0);
}
'''
self.setStyleSheet(qss)
if __name__ == '__main__':
app = QApplication(sys.argv)
dispaly = removebg()
dispaly.show()
sys.exit(app.exec_())
8.界面展示

此外,还可以为生成的程序添加专属图标以增强辨识度。
至此,关于Python PyQt5结合Remove.bg API实现高效抠图去背景的完整教程已结束。如需了解更多Python PyQt5相关抠图技巧,欢迎查阅本站往期文章或继续浏览后续内容,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













