使用Python制作一个照片换底色的exe程序文件(详细教程)

文章目录


前言

在校大学生,突然心血来潮写下这么一篇文章。

技术一般般,纯属业余水平,希望能与大神们互相探讨。 

        本篇文章对于新手来说非常友好,使用Python强大的库可以非常轻松的完成你想做的东西。本文主要使用tkinter和Image等库来实现将照片换底色。

        本来是想用opencv来对图片进行处理的,但是自身能力有限,对opencv不是特别熟练,所以在这里针对图片处理我选择调用removebg的API来对图片进行去除背景的处理。removebg处理后的图片效果确实可以

        废话不多说,跟着一起学习一下叭!Go!Go!Go!

一、安装相对应的库

        使用命令安装

pip install 库名

        用上面这行命令即可安装库。在这里,需要安装tkinter(tkinter现在的python是自带有的,如果没有那就装一下)、ImageRemoveBg库。

        安装好就可以直接导入库了。

部分代码如下:

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox as msg
from PIL import Image
from removebg import RemoveBg

二、关于图片处理

1.关于RemoveBg

        remove.bg 的使用非常的简单傻瓜,打开速度、图片上传和相应速度也非常快,网站上也没有过多的操作按钮,选择图片上传后,只需要等待几秒,图片就处理完成了。

        当然,RemoveBg也为我们这些开发人员提供了API,使用起来非常方便。

        点此跳转到RemoveBg官网申请API 使用邮箱注册就可以获取API了,非常简单。复制API到代码中就行了。RemoveBg也提供有开发文档可以查看,想了解更多的可以去看一看。还有在线去除背景等。跳转RemoveBg官网首页

2.图片处理代码编写

        (在这我说明一下,以下代码段的编写均为后面打包exe后缀文件而编写的,如需单独编写则需要更改部分代码。)

        由于处理图片并不需要我们去写,我们写几行代码调用RemoveBg的API来对图片进行处理就行。因为本文最终需要实现的是可视化窗口的程序,在这,我们写一个去除背景的函数。方便后面编写窗口的时候调用。代码过于简单,我就不多说了,代码中我也都写有解释,直接上代码👇👇👇

# 去除背景函数
def removeBG():
    rmbg = RemoveBg("替换成你申请的API", "error.log")  # 使用removebg中申请的API, "error.log"是错误日志。
    savePath_rmbg_png = path.get()  # path1:目标路径
    rmbg.remove_background_from_img_file(savePath_rmbg_png)  # 使用remove_background去除背景,去除背景后的文件保存在目标路径,“_no_bg.png”后缀
    msgBox_Success2()  # 提示去除背景成功

        这样我们就能得到一张已经将背景去除的图片,并且会自动保存到原图所在的路径中。然后然后,我们还需要写几个函数,函数用来对刚刚去除背景的图片换上新的背景颜色。在这呢,我写了三个函数,分别对应着红色背景、蓝色背景、白色背景这三个颜色。

        在这使用的这换背景的方法也是比较好理解,就是获取已经去除背景的那张图片的大小尺寸,然后新建一个图片文件,大小就跟没有背景的那张图片一样大,然后将没有背景的图片叠加到新建的图片中,就这样,搞定。在这我就写出一种颜色背景的方法,剩下的雷同我就不多赘述。

        在这我说一下,图片的背景颜色大家可以自定义更换,更换RGB的值即可。这里需要注意一点:更换后的图片尺寸是和原图尺寸一样的,在这里我并没有对图片的尺寸进行更改。

部分代码如下:

# 更换红色背景函数
def transition_red():
    rmbg_png = savePath_rmbg_png + '_no_bg.png'  # 去除背景后的文件路径
    im = Image.open(rmbg_png)
    x, y = im.size  # 图片大小

    try:
        r = Image.new('RGBA', im.size, (255, 0, 0))  # 背景颜色  RGB
        r.paste(im, (0, 0, x, y), im)
        savePath_png = savePath.get() + '.png'
        # 新建存储路径的jpg文件
        jpgOutput = open(savePath_png, 'wb')
        r.save(jpgOutput)
        msgBox_Success1()  # 成功提示
    except:
        pass

3.窗口图片选择以及提示函数

        细心的小伙伴可能就发现了,前面的图片处理代码中都写有提示函数,这个只需两行代码就可以搞定了。还有既然是exe程序,那如何选择图片文件呢?非常简单,接下来我们就一起看看。

        首先先将提示函数来写一下,其他的按照需要的更改一下就完事了。

部分代码如下:

# 弹窗提示:转换成功
def msgBox_Success1():
    msg.showinfo('SUCCESS', '转换成功')

        然后就是选择图片的函数了,使用tkinter的选择路径函数,对图片进行选择。选择后,需要对路径的符号进行处理。使用replace转换一下符号就搞定了。最后存储一下路径。

部分代码如下:

def selectPicture1():
    picture_1 = tkinter.filedialog.askopenfilename()  # 选择路径函数
    picture_1 = picture_1.replace("/", "\\\\")  # 路径符号转换
    path.set(picture_1)  # 路径存储到变量path1

4.可视化窗口

        图片处理的搞定了,接下来就是将这些操作“包装”起来,做成可视化窗口的形式。可视化窗口的话我在这使用python自带的tkinter库。轻量级应用足够使用了,关键是简单,非常容易上手。

        先来看看我所写的窗口效果图👇

        界面做的比较简陋,主要追求实用性😆  有需要可以后期加工一下,将界面美化美化。

        首先新建一个窗口,定义窗口的标题、窗口的大小等。

# 创建窗口
win = tk.Tk()
win.title('照片换底')  # 窗口标题
win.geometry('290x280')  # 窗口的大小  ※注意:这里的乘是×不是*

        然后在窗口排版方面我分为四个子框架来编排。在第一个子框架中,为待处理照片的操作,包括可供选择图片的按钮以及显示选择图片后调用前面写过的函数转换路径符号后的路径。

部分代码如下:

mighty1 = ttk.LabelFrame(win, text=' 待处理照片 ')  # 限制在一个子框架内
mighty1.grid(column=0, row=1, padx=8, pady=4)  # 子框架位置
tk.Label(mighty1, text="目标路径:").grid(row=1, column=0)
tk.Entry(mighty1, width=20, textvariable=path).grid(row=1, column=1, columnspan=2)
tk.Button(mighty1, text="选择图片", command=selectPicture1).grid(row=1, column=3)  # 为按钮调用selectPicture1函数

        接下来是第二个框架,在第一个窗口中选择好了图片,就对其进行去除背景的操作,原理也很简单,写个按钮调用去除背景的函数就可以达到去除背景的效果了。

部分代码如下:

# 去除背景模块
mighty2 = ttk.LabelFrame(win, text=' 去除背景 ')  # 限制在一个子框架内
mighty2.grid(column=0, row=2, padx=8, pady=4)  # 子框架位置
tk.Label(mighty2, text="选好目标路径先点➡").grid(row=2, column=0)
tk.Button(mighty2, text="去除背景", command=removeBG).grid(row=2, column=1)  # 调用removeBG函数去除背景

        去除背景后在第三个子框架中对存储路径进行选择,这里跟前面的选择图片类似。

部分代码如下:

# 存储路径选择
mighty3 = ttk.LabelFrame(win, text='存储路径选择')
mighty3.grid(column=0, row=3, padx=8, pady=4)
tk.Label(mighty3, text="存储路径:").grid(row=3, column=0)  # 标签:存储路径
tk.Entry(mighty3, width=20, textvariable=savePath).grid(row=3, column=1, columnspan=2)  # 输入框:显示已选择的存储路径
tk.Button(mighty3, text="保存图片", command=saveDir1).grid(row=3, column=3)  # 按钮:选择存储路径,输入存储文件名

        最后一个子框架,也就是关于更换底色的。这里我编写了三种颜色,与前面相对应,分别是红色背景、蓝色背景和白色背景。关于更换底色的操作我在前面已经说过了,这里就直接写窗口代码。

部分代码如下:

# 更换底色模块
mighty4 = ttk.LabelFrame(win, text='更换底色')
mighty4.grid(column=0, row=4, padx=8, pady=4)
mergeButton = ttk.Button(mighty4, text='更换红底', command=transition_red)  # 按钮:更换操作,调用函数transition_red
mergeButton.grid(column=0, row=6)
mergeButton1 = ttk.Button(mighty4, text='更换蓝底', command=transition_blue)  # 按钮:更换操作,调用函数transition_blue
mergeButton1.grid(column=1, row=6)
mergeButton2 = ttk.Button(mighty4, text='更换白底', command=transition_white)  # 按钮:更换操作,调用函数transition_white
mergeButton2.grid(column=2, row=6)

        关于所更换的背景颜色,不一定固定这三种颜色,可以根据自己的喜好在前面的更换背景颜色中自由更改颜色(RGB)的值。这里需要注意一点,更换底色的是独立的按钮,每个按钮都是不同的底色,在第三个子框架中选择好存储路径以及存储文件名后即可点击,需要对同一张图片更换多种底色时,需在更换一次后重新对存储的文件名命名。

5.打包成exe程序

        使用python库pyinstaller打包exe程序

安装pyinstaller:

pip install pyinstaller

 打包命令:

pyinstaller -i 123.ico -F -w main.py

  关于打包命令中的参数:

参数名描述说明
-i为main.exe指定图标pyinstaller -i beauty.ico main.py
-w不显示命令行窗口编写GUI程序时使用此参数有用。
-c显示命令行窗口与-w相反,默认含有此参数
-F生成one-file的程序生成结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内

        “-i”可不使用,如果打包后遇到问题无法运行exe程序,可将“-w”去掉重新运行打包命令进行打包,在打开程序时弹出的命令行窗口中检查出现什么问题,进而去解决报错问题。(比较常见的是缺少库)

        如果测试没问题,那就完成啦!


写在最后

        关于这篇文章

        文章内容都是基础知识,界面做的比较简陋,主要是实用性就OK啦,大神们如有任何问题都可提出。

        最后,希望这篇文章能够帮助更多的人学习到更多东西。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值