本文目录:前期准备-编写代码-测试结果-文末福利
本文作者:小赖同学
不知不觉就到了2月中旬了,因为肺炎疫情大家都一再延迟了上班上学,天天睡到大中午,起来吃个小午餐,玩手机睡午觉又到大晚上,哪都不敢去,被迫放假是真的很难受。
而我,虽然已经上班了,但下班了哪都不敢去,超级无聊。这几天,在整理以前的摄影照片时无意中发现了几张证件照,又看到了电脑桌面的PS,突然间就来了点灵感,好像好像又不那么无聊了。
我可以用Python来抠图吗?可以给证件照换个底色吗?我可以负责任地告诉你,经过几天实践得知,可以!只有几行代码而且还很快!(提前偷偷告诉你,文末还有福利哦)
啥,想看看效果图?好,上动图。
啥,想看看是如何实现的?好,接下来请听我慢慢叙述。
1、工具挑选
Python要实现抠图功能,网上有很多方法。我这边经过对比,挑选了RemoveBg这款工具。RemoveBg是国外的一个专业为人物去除背景的神器,它利用的是智能AI抠图,100%全自动化,全程无需人为操作抠图,可以说是非常简单快捷的一款工具了,并且号称只要5秒就能完成去除背景,这个工具目前完全免费,提供PNG图片下载。
官网支持网上在线抠图,只需要简单注册获取其API KEY就可以使用,每个API KEY每月免费50张,但由于是国外服务器,使用过程会感觉页面加载有点缓慢,导出的图片大小也会有所压缩和限制。
最重要的是Python支持RemoveBg,只需要下载安装这个模块就可以使用了,完美符合此文的主题。
2、获取API KEY
搜索RemoveBg官网,进入官网注册一个账号就可以获得API KEY。这个API KEY是相当于一个“身份ID”,实现证件照换底色需要导入第三方模块removebg,有了这个ID就可以使用到RemoveBg的“技术支持”。
RemoveBg官网:https://www.remove.bg/zh,API KEY获取网址:https://www.remove.bg/zh/api,获取API KEY的具体操作也很简单:
1、安装removebg模块和Pillow模块
Windows + R打开运行窗口,然后输入cmd打开命令提示符窗口,在命令行终端输入pip install removebg进行removebg模块的安装,输入pip install Pillow进行Pillow模块的安装。
稍等一会,提示安装成功就可以使用这两个模块了。(备注:我这是因为配置好了python环境的,没安装python的可以自己搜索下如何安装。)
2、代码介绍
安装好了需要的工具模块后,就可以开始编写代码了。证件照换底色使用的主要代码也就十行左右。
rmbg = RemoveBg(api_key, "error.log")
rmbg.remove_background_from_img_file(old_image_path)
首先是获得RemoveBg,传入上述所说的API KEY,再将需要更换底色的证件照路径传入其remove_background_from_img_file()方法,此方法会在证件照路径下新生成一个抠除底色的图像。
no_bg_image = Image.open(no_bg_image_path)
x, y = no_bg_image.size
try:
new_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(new_image_path)
except:
print("image matting except")
接着通过PIL下的Image打开抠除底色的图像,获取到其分辨率大小等数据后再通过Image新生成一个特定底色的证件照,color即是需要更换成的底色,color可以是"red"等英文字符串,也可以是(255, 0, 0)等RGB值。最后把更换底色后的证件照保存到你选择的路径下,底色更换就完成了。
3、完整代码
通过上面第二点的介绍,就已基本清楚了证件照更换底色的代码实现原理,最后就附上完整的简单整合的实现代码。
import os
from PIL import Image
from removebg import RemoveBg
def image_matting(old_image_path, new_image_path, api_key, color):
# API KEY获取官方网站:https://www.remove.bg/zh/api
rmbg = RemoveBg(api_key, "error.log")
rmbg.remove_background_from_img_file(old_image_path)
parent_path = os.path.dirname(old_image_path)
old_image_name = os.path.split(old_image_path)[-1]
no_bg_image_name = old_image_name + "_no_bg.png"
if no_bg_image_name in os.listdir(parent_path):
no_bg_image_path = parent_path + "/" + no_bg_image_name
no_bg_image = Image.open(no_bg_image_path)
x, y = no_bg_image.size
try:
new_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(new_image_path)
except:
print("image matting except")
else:
print("image matting fail")
1、挑选证件照
因为本地我的证件照是原图,分辨率太大,为避免卡崩,我去百度上搜索下载了两张合适的靓女靓仔的证件照来测试效果如何。测试原图如下所示。
靓女靓仔原图-图源网络
2、测试结果
用代码换底色新生成的证件照整体感觉还可以,看上去并没有多大的瑕疵,头发边边的处理也挺舒服,对于不会PS的小白来说简直就是福利,对于会抠图又懒得花时间去抠的人来说简直就是偷懒神器。
靓女-更换后
靓仔-更换后
1、福利
你以为到这就结束了?不,还有福利!!!毕竟还是有很多人是不懂代码的,又不会抠图,是个PS小白,于是,我又熬了下夜,把这个代码打包成了exe独立程序,无需python环境也可以在自己电脑上运行,现在只要在公众号“学渣同学”后台回复“证件照神器”即可获得这个工具!
2、工具效果图
图标
界面
推荐阅读
【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化
可以重启2020吗?我用Python分析总结了1月份发生了什么