资讯专栏INFORMATION COLUMN

❤️Python实用工具之制作证件照(有界面、附源码、赞关藏)❤️

Doyle / 3306人阅读

镇楼图

一点想说的

想当年我不会Python的时候,做个证件照还要下 XX证件照 软件,每次5元,感觉血亏,现在长本事了,自己做证件照,XX证件照 拜拜了您嘞~



必要配置

确保下面的库都已安装。
主要涉及到的库:
tkinter:实现 GUI 编程(文本框、按钮、标签等组件实现 GUI 开发)。
PIL:第三方图像处理库,十分强大,由于使用人数庞大再加上确实牛,几乎已经被认为是 Python 官方图像处理库。
pathlib:面向对象的编程方式来表示文件系统路径。
ttkthemestkinter 主题包,让你的组件外观更加骚。
Pyinstaller:是一个非常简单的打包 .py 文件的库。
removebg:看名字就知道,专门抠图的库。

removebg配置

安装对应的 Python 库

pip install -i https://pypi.douban.com/simple removebg

获取API Key

进入 Removebg 官网,完成账号注册。

填写完注册信息后,会发送验证邮件到你的邮箱,点击进入后会进入如下界面。

点击 Remove image background

再点击红圈中的 Tool & API

点击 Get API Key

点击 Show 即可查看 API Key 了,最好记下来哦,之后代码中会用到。



无界面版

修改图片背景色

使用 RemoveBg 时必须指定 api-keyerror.log(保存报错信息的文件),去掉背景之后会在原图片同级文件夹内生成一张 xxx_no_bg.png 的图片,再创建一个指定颜色的背景板,将抠出来的图粘贴到背景板上。

# 修改照片背景色def replace_bg(read_path, save_path, api_key, bg_color="blue"):    # 在程序当前目录创建一个error.log文件来保存错误信息(必要参数)    Path("error.log").touch()    rmbg = RemoveBg(api_key, "error.log")    # 执行后会在 read_path 同级文件夹内生成一张 xxx_no_bg.png 的图片    rmbg.remove_background_from_img_file(read_path)    img_no_bg = Image.open(read_path + "_no_bg.png")    # 创建一个新的图像,RGB代表真色彩,3通道,    # color可以为颜色英文名 red 或是 十六进制颜色代码 #00FF00    new_img = Image.new("RGB", img_no_bg.size, color=bg_color)    # 将没有背景的图像粘贴到含背景色的图像上    new_img.paste(img_no_bg, (0, 0, *img_no_bg.size), img_no_bg)    new_img.save(save_path)

修改图片大小

读取图片,直接使用 resize 修改图片尺寸,Image.ANTIALIAS 设置为高质量。

# 修改照片尺寸295x413(标准一寸)def change_size(read_path, save_path, width=295, height=413):    image = Image.open(read_path)    resized_image = image.resize((int(width), int(height)), Image.ANTIALIAS)    resized_image.save(save_path)


升级版

设置窗口主题与标题

这里使用的主题时 adapta,官方推荐,样式很好看。

window = ThemedTk(theme="adapta", fonts=True, themebg=True)window.title("证件照生成器")

添加选择图片路径组件

选择待修改图片的路径。

def selectFilePath():    global img_path    # 选择文件path接收文件地址    img_path = Path(filedialog.askopenfilename(title="选择原图片"))    x, y = Image.open(img_path).size    entry4.insert(0, str(x) + "x" + str(y))    path1.set(img_path)    path1 = tk.StringVar()entry1 = ttk.Entry(window, textvariable=path1, width=30)entry1.insert(0, "格式要求png")button1 = ttk.Button(window,width=10, text = "图片路径", command = selectFilePath)

添加选择保存路径组件

选择修改后图片的保存路径,该路径为文件夹。

def selectDirPath():    global dir_path    # 选择文件path接收文件地址    dir_path = Path(filedialog.askdirectory(title="选择图片保存路径"))    path2.set(dir_path)    path2 = tk.StringVar()entry2 = ttk.Entry(window, textvariable=path2, width=30)button2 = ttk.Button(window,width=10, text = "保存路径", command = selectDirPath)

添加选择背景颜色组件

这里使用tkintercolorchooser 来当作颜色板,不得不说,实在是太好用了 。

def ChooseColor():    global bg_color    # 返回两种格式的颜色代码,这里只保存十六进制的    _, bg_color = colorchooser.askcolor(title="颜色选择器")    path3.set(bg_color)    path3 = tk.StringVar()entry3 = ttk.Entry(window, textvariable=path3, width=30)button3 = ttk.Button(window, text="背景颜色", command=ChooseColor)


添加填写图片尺寸组件

如果要修改图片的话,就填写这一栏,默认为原图尺寸,这里如果想要标准尺寸的话,建议先自己百度一下,如标准一寸就是295x413(标准一寸)。

# 设置图片大小,默认原图大小,格式如295x413(标准一寸)label = ttk.Label(window, text="默认原图大小,若要修改请按[]内/                    格式,如 [295x413] (标准一寸照)", wraplength=200, style="two.TLabel")entry4 = ttk.Entry(window, width=30)label1 = ttk.Label(window, text="图片尺寸", style="three.TLabel")

添加填写API-KEY组件

将输入框设置显示值为 “*”,可以达到隐藏显示值的效果。这里就要填写上面获取的 api-key 了。

# 填写api-keyentry5 = ttk.Entry(window, width=30, show="*")label2 = ttk.Label(window, text="api-key", style="three.TLabel")

添加控制按钮

  • 修改背景按钮:只修改原图的背景图,需要指定原图路径,保存路径,背景颜色等。
  • 修改尺寸按钮:只修改原图的尺寸,需要指定原图路径,保存路径,图片尺寸等。
  • 同时修改按钮:同时修改原图的尺寸与背景,需要指定原图路径,保存路径,图片颜色(可选),图片尺寸(可选),如果未选择颜色,尺寸则默认蓝底,图片尺寸为295x413(标准一寸)。
# 添加“同时修改”按钮button4 = ttk.Button(window, text = "同时修改", command=change_bg_size)# 添加“修改背景”按钮button5 = ttk.Button(window, text = "修改背景", command=replace_bg)# 添加“修改尺寸”按钮button6 = ttk.Button(window, text = "修改尺寸", command=change_size)

添加输出框显示

显示运行结果信息。

# 添加输出框显示tree = ttk.Treeview(height=1, show=("tree", "headings"))

设置组件位置

这里使用 grid() 来设置位置,也可以用 pick() ,但个人更倾向于前者。

main_label.grid(row = 0, column = 0, pady=5)entry1.grid(row = 1, column = 0, pady=5)button1.grid(row = 1, column = 1, padx=20)entry2.grid(row = 2, column = 0, pady=5)button2.grid(row = 2, column = 1, padx=20)entry3.grid(row = 3, column = 0, pady=5)button3.grid(row = 3, column = 1, padx=20)label.grid(row = 4, column = 0, pady=5)entry4.grid(row = 5, column = 0, pady=5)label1.grid(row = 5, column = 1, pady=5)entry5.grid(row = 6, column = 0, pady=5)label2.grid(row = 6, column = 1, pady=5)button4.grid(row = 7, column = 1, padx=5)button5.grid(row = 7, column = 0, padx=5)button6.grid(row = 8, column = 0, padx=5)tree.grid(row=9, column=0, pady=5)

设置组件样式

再原组件的基础上修改自己喜欢的样式。

label_style = ttk.Style()label_style.configure("one.TLabel", font=("微软雅黑", 16, "bold"), foreground="red", background="yellow")label_style1 = ttk.Style()label_style1.configure("two.TLabel", font=("微软雅黑", 9), foreground="blue", background="yellow")    label_style2 = ttk.Style()label_style2.configure("three.TLabel", font=("微软雅黑", 10), foreground="blue", background="yellow")



源码打包

虽然之前的文章中已经介绍过很多次打包的方法,但为了新读者,还是再来简单讲解一下。
首先要确保已经安装 pyinstaller,没有安装的可以先安装一下。

pip install -i https://pypi.douban.com/simple pyinstaller 

pyinstaller 使用时的常用参数含义:

-F:打包单个文件,产生一个文件用于部署(默认),如果代码都写在一个 .py 文件时使用,项目有多个文件时不要使用

pyinstaller -F xxx.py

-D:打包多个文件,产生一个目录用于部署(默认),用于框架编写的代码打包

pyinstaller -D xxx.py(项目入口文件)

–key=keys:使用 keys 进行加密打包

pyinstaller --key=123456 -F xxx.py

-d:产生 debug 版本的可执行文件

-p:用来添加程序所用到的包的所在位置,设置导入路径,可以用 ; ( Linux 使用 :)分割来指定多个目录。

-w:表示不用控制台窗口,使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)

-c:表示打开控制台窗口,使用控制台子系统执行,当程序启动的时候会打开命令行(默认)(只对 Windows 有效)

-i:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)

安装完成后,新建一个文件夹,将源文件放到该文件夹下面,打开cmdcd 进入该文件夹下(重点),执行下面语句

生成的文件结构如下

exe 可执行文件在 dist 目录下

这就是本文所有的内容了,如果感觉还不错的话。❤ 点个赞再走吧!!!❤


后续会继续分享各种干货,如果感兴趣的话可以点个关注不迷路哦~。



❤️源码获取方式❤️

像我这么宠粉的人~当然会给关注我的粉丝们亿点小福利啦,关注下方小卡片,回复工具左上角的名称即可获取源码哦!

? ? ?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119758.html

相关文章

  • 程序员【代码管理】工具介绍❤,热门语言更新这么快,你绕不过这一关的!

    上次讲了2个游戏源码 前端实战之js推箱子游戏(有界面、附源码、赞关藏) Python实战:五子棋小游戏,切身感受一下前端和桌面应用的区别,选择自己喜欢的 本来今天准备写一篇面向对象文章,但是想一想,讲面向对象之前还是先给大家介绍几款实用的工具,更加快速的理解,掌握知识点。 1.UML 统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可...

    array_huang 评论0 收藏0
  • 女友忽然欲买文胸,但不知何色更美,Python【全程实战,议藏

    摘要:文章目录情景再现本文关键词挑个软柿子单页爬取数据处理翻页操作撸代码主调度函数页面抓取函数解析保存函数可视化颜色分布评价词云图源码获取方式情景再现今日天气尚好,女友忽然欲买文胸,但不知何色更美,遂命吾剖析何色买者益众,为点议,事后而奖励之。 ...

    宠来也 评论0 收藏0
  • 爬虫+自动化利器 selenium 自学成才篇(一)❤

    文章目录 selenium 简介selenium安装安装浏览器驱动确定浏览器版本下载驱动 定位页面元素打开指定页面id 定位name 定位class 定位tag 定位xpath 定位css 定位link 定位partial_link 定位 浏览器控制修改浏览器窗口大小浏览器前进&后退浏览器刷新浏览器窗口切换常见操作 鼠标控制单击左键单击右键双击拖动鼠标悬停 键盘控制 seleni...

    james 评论0 收藏0
  • 爬虫 + 自动化利器 selenium 自学成才篇(二)

    摘要:耗时代码运行到这句之后触发隐式等待,在轮询检查后仍然没有定位到元素,抛出异常。耗时值得一提的是,对于定位不到元素的时候,从耗时方面隐式等待和强制等待没什么区别。 ...

    AWang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<