本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。

开始

基于上一篇博客获取api的教程https://blog.csdn.net/hijacklei/article/details/115433874
受猪哥微信公众号的一篇文章的启发,在这里将我的想法实现,因为我们有时候会按照第三方的要求,提交不同底色的照片,于是有的人用ps 有的用excel 有的用其他工具,但是我想的是开发一个既方便效果又好的工具,直接一键完成。接下来我将它写为更换照片底色的工具方便使用

开发配置

模块:pyqt5、sys、PIL、removebg
开发工具:Pycharm

代码

#coding=utf-8
#@Time:2021/4/4 22:00
#@Author:csdn@hijacklei
#@File:piccolorchange.py
#@Software:PyCharm
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from PIL import Image
from removebg import RemoveBg
import imageusetool_rcclass ZhengJian(QMainWindow):def __init__(self):super(ZhengJian, self).__init__()self.initUI()def initUI(self):self.setWindowTitle("背景换色")self.resize(600,290)self.setWindowIcon(QIcon(r":/22.ico"))_translate = QtCore.QCoreApplication.translate# 添加菜单栏bar = self.menuBar()file = bar.addMenu("使用须知")file.addAction("点击查看")file.triggered.connect(self.see)file1 = bar.addMenu("打开remove网页")file1.addAction("点击打开")file1.triggered.connect(self.openweb)file2 = bar.addMenu("打开获取API教程")file2.addAction("点击打开")file2.triggered.connect(self.openapi)#原图显示也区域self.imageshow=QLabel("转换前显示",self)self.imageshow.setAlignment(Qt.AlignCenter)#文字居中self.imageshow.move(220,40)self.imageshow.resize(170,220)op = QtWidgets.QGraphicsOpacityEffect()  # 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.8)self.imageshow.setGraphicsEffect(op)self.imageshow.setStyleSheet("QLabel{background:gray;}""QLabel{color:rgb(255,255,255,150);""font-size:20px;""font-weight:bold;""font-family:Roman times;}")# 转换后显示区域self.zhuanhuanshow = QLabel("转换后显示", self)self.zhuanhuanshow.setAlignment(Qt.AlignCenter)  # 文字居中self.zhuanhuanshow.move(420, 40)self.zhuanhuanshow.resize(170, 220)op = QtWidgets.QGraphicsOpacityEffect()  # 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.8)self.zhuanhuanshow.setGraphicsEffect(op)self.zhuanhuanshow.setStyleSheet("QLabel{background:gray;}""QLabel{color:rgb(255,255,255,150);""font-size:20px;""font-weight:bold;""font-family:Roman times;}")# 选择图像按钮self.picselect=QPushButton("点击选择图像",self)self.picselect.resize(150,28)self.picselect.move(25,40)op = QtWidgets.QGraphicsOpacityEffect()# 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.6)self.picselect.setGraphicsEffect(op)self.picselect.clicked.connect(self.selectimage)# 图像文件路径显示文本框self.shujulujing = QLineEdit(self)self.shujulujing.move(25,75)self.shujulujing.resize(150, 28)# self.shujulujing.setStyleSheet("background:transparent")  文本透明self.shujulujing.setPlaceholderText(_translate("MainWindow", "图像地址路径"))# 选择保存文件路径按钮self.baocun = QPushButton("选择保存地址", self)self.baocun.resize(150,28)self.baocun.move(25,110)op = QtWidgets.QGraphicsOpacityEffect()  # 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.6)self.baocun.setGraphicsEffect(op)self.baocun.clicked.connect(self.baocundizhi)# 转换后保存的文件路径self.lujing = QLineEdit(self)self.lujing.move(25,150)self.lujing.resize(150, 28)# self.lujing.setStyleSheet("background:transparent")  文本透明self.lujing.setPlaceholderText(_translate("MainWindow", "保存地址路径"))# API输入文本框self.ap=QLineEdit(self)self.ap.move(25,190)self.ap.resize(150,28)# self.ap.setStyleSheet("background:transparent")  文本透明self.ap.setPlaceholderText(_translate("MainWindow", "输入API"))# 颜色选择下拉框self.colorslect=QComboBox(self)self.colorslect.move(25,230)self.colorslect.resize(70,30)op = QtWidgets.QGraphicsOpacityEffect()  # 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.6)self.colorslect.setGraphicsEffect(op)self.colorslect.addItems(['白色','蓝色','红色'])self.colorslect.currentIndexChanged[str].connect(self.selectyanse)# 开始转换按钮self.queding=QPushButton("开始转换",self)self.queding.move(105,230)self.queding.resize(70,30)op = QtWidgets.QGraphicsOpacityEffect()  # 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明op.setOpacity(0.6)self.queding.setGraphicsEffect(op)self.queding.clicked.connect(self.zhuanhuan)def selectyanse(self,i):pass# 转换按钮def zhuanhuan(self):color= self.colorslect.currentIndex()if color==0:color=(255,255,255)if color==1:color=(0,0,255)if color==2:color=(255,0,0)# removebg涉及到api_key,需要到其官网申请api_key = str(self.ap.text())#'4wZqgKqA5E31qiLJkoPnFheK'file_in = str(self.shujulujing.text())file_out = str(self.lujing.text())+"/"+'22.png'# color = self.colorslect.currentText()p, s = file_in.split(".")rmbg = RemoveBg(api_key, 'error.log')rmbg.remove_background_from_img_file(file_in)file_no_bg = "{}.{}_no_bg.{}".format(p, s, s)no_bg_image = Image.open(file_no_bg)x, y = no_bg_image.sizenew_image = Image.new('RGBA', no_bg_image.size, color=color)new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image)new_image.save(file_out)jpg = QtGui.QPixmap(file_out).scaled(self.zhuanhuanshow.width(), self.zhuanhuanshow.height())self.zhuanhuanshow.setPixmap(jpg)QMessageBox.information(self,"完成","更改完成!", )def selectimage(self):text, ok = QFileDialog.getOpenFileName(self,"打开文件", "", "*.png;;*.jpg;;All Files(*)")print(text)jpg = QtGui.QPixmap(text).scaled(self.imageshow.width(), self.imageshow.height())self.imageshow.setPixmap(jpg)if ok and text:self.shujulujing.setText(text)def baocundizhi(self):text1 = QFileDialog.getExistingDirectory(self,"保存文件","")self.lujing.setText(text1)def see(self):QMessageBox.information(self,"温馨提示","API需要到官网申请!", )def openweb(self):link="https://www.remove.bg/zh"QDesktopServices.openUrl(QUrl(link))def openapi(self):link = "https://blog.csdn.net/hijacklei/article/details/115433874"QDesktopServices.openUrl(QUrl(link))if __name__ == '__main__':app=QApplication(sys.argv)main=ZhengJian()palette1=QPalette()pix = QPixmap(r':/33.jpeg')pix = pix.scaled(main.width(), main.height())palette1.setBrush(QPalette.Background, QBrush(pix))main.setPalette(palette1)main.show()sys.exit(app.exec_())

效果

这个是开发好的软件

对于程序来说,打包成,.exe文件,并且显示好对应的图标,可参考我之前写的两篇博客:
1、https://blog.csdn.net/hijacklei/article/details/106540151
2、https://blog.csdn.net/hijacklei/article/details/112274805
执行终端后打包成功:

展示

1、打开软件进入主界面

2、打开使用须知

3、对应的打开获取API的教程(参考我上一篇博客)
4、点击选择图像,打开待更换背景颜色的证件照,会转换前的显示区域显示,然后选择保存的位置,并且将获取的API粘贴在输入API区域,选择待转换的颜色,本工具目前支持蓝色、白色和红色 基本上也是最常用的颜色,点击开始转换即可

更换完成,并且查看你选择的保存位置有新生成的照片

中间那张1.png_no_bg是去除背景颜色的照片

完成

所有工作完成,为我们今后更换电子证件照底色提供了方便。

基于python的更换照片底色工具开发相关推荐

  1. 不会用修图工具没关系,Excel也能轻松更换照片底色

    很多小伙伴觉得修图工具很复杂,花费了很长时间去学习怎么修改照片的底色最后却达不到想要的效果,其实修改照片底色不一定要用修图工具,Excel同样可以修改,是的,你没有看错,就是用Excel更换照片底色, ...

  2. sphinx:基于 Python 的文档生成工具

    sphinx:基于 Python 的文档生成工具 Motivation 对于软件开发来说,文档是软件可维护性的重要保障.sphinx 是一款文档生成工具,以 restructuredText 为标记语 ...

  3. 【基于Python+tkinter的音乐播放器开发-哔哩哔哩】 https://b23.tv/eG2TwOL

    [基于Python+tkinter的音乐播放器开发-哔哩哔哩] https://b23.tv/eG2TwOL https://b23.tv/eG2TwOL

  4. wafw00f--一款基于python识别网站WAF的工具

    渗透时候经常会被waf之类的拦截,这时候需要知道目标站点使用了什么防火墙,然后才能根据对应防火墙寻找绕过的姿势.wafw00f就是一款识别网站防火墙的工具. 文章目录 简介 原理 项目地址 命令参数 ...

  5. 其实更换照片底色,使用excel也可以完成。

    前言: 很多时候,说到更换照片底色,大多数人会使用的软件ps或者是美图秀秀,其实不知道的是最常使用的Excel,也可以达到这个目的. https://jingyan.baidu.com/article ...

  6. 基于python的全部开源的快速开发平台

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 今天说的这个软件是一款基于python的全部开源的快速开发平台. 二.实现功能 系统管理 菜单管理 部门管理 角色管理 用户管理 常规配置 字典管理 ...

  7. 基于PYTHON的超大文本分割工具

    "记事本"作为一款保存信息的载体,基本上每个网民都见过或使用过它.它不但读取方便,使用起来也是得心应手.不过,对于存放有超大数据的TXT文本,我们对它又爱又恨.爱它是因为我们的信息 ...

  8. 信息安全 python_一种基于Python的信息安全情报收集工具

    邵云蛟 吴丽莎 张凯 吴屏 摘 要:目前,公司信息安全情报收集工作主要依靠人工方式进行.主要由运维人员每日登陆相关信息安全资讯网站或接收由绿盟.启明等安全厂商发送的信息安全情报信息,这种方式效率低下, ...

  9. python 放射 水平_基于Python的放射性核素大气扩散程序初步开发与验证

    龙源期刊网 http://www.qikan.com.cn 基于 Python 的放射性核素大气扩散程序初 步开发与验证 作者:刘朋杰,张旖旎,刘天元 来源:<科学与财富> 2018 年第 ...

最新文章

  1. 前端必须会的基本知识题目
  2. linux共享内存通信方式,linux下进程通信方式--共享内存
  3. 成功解决ValueError: Shape of passed values is (33, 1), indices imply (33, 2)
  4. 服务器管理器运行添加角色向导,Windows Server 2008 服务器角色的添加与管理
  5. gcc编译选项-Os的用法
  6. scala语言的底层是java实现的_2020了,每个程序员都该学习的 5 种开发语言
  7. 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素
  8. 项上的温柔,冬季围巾8大打法图解(组图)
  9. 二分答案——木材加工(洛谷 P2440)
  10. PHP判断升级,版本检测升级(更新)库
  11. 与体育行业有关的e–r图_国家体育产业统计分类
  12. 用Wineskin在Mac上运行exe文件
  13. Java基础入门第二版 课后答案
  14. #MAXScript学习# 1批量导出fbx
  15. 2022年前端技术发展趋势
  16. 重新启动计算机的方法有,如何取消电脑自动更新后的重新启动计算机提示
  17. 电脑缓存,缓存设置(电脑缓存设置多少合理)
  18. html表格自动分列,html页面中表单怎么用div分列布局
  19. 信号处理原理-郑方(学习笔记)
  20. maven 中配置多个mirror的问题

热门文章

  1. 安卓多渠道打包(三)360加固多渠道打包
  2. 【BZOJ4094】[Usaco2013 Dec]Optimal Milking 线段树
  3. nginxpcmobile
  4. hdmi接口有什么用_VGA、DVI、HDMI、DP、TYPE-C接口都有什么区别?
  5. linux如何识别3t硬盘分区,linux下,给3T硬盘分区,parted命令出现问题,无法分区!!!!急!!...
  6. 【XBOX360】Xbox360 RGH3.0 刷机教程
  7. Python(arcpy) 批量计算流域面积
  8. 安装scss后报错Module build failed: TypeError: loaderContext.getResolve is not a function解决方法
  9. ubuntu文件系统字体底纹含义
  10. 安装pocoui报错