生活中经常需要使用各种版本的电子版证件照,如:红底、蓝底、白底、一寸、两寸等等。
在 Python 中替换图片背景色可以用 Image 模块,
利用 Image 模块可以改变图片大小、背景色等操作。
第一步:人像分离
第一步将原图片中的人物与背景分离,
我们使用百度 AI 开放平台中的人像分割功能,它的免费版有 50000次/天。
使用百度的产品都知道需要一个 SK 和 AK。
如何获取:APP_ID, API_KEY, SECRET_KEY
首先登陆百度云:https://login.bce.baidu.com/
选择产品服务–>人体分析
点击创建应用,并填写内容,下一步进入管理
就能看到想要的APP_ID, API_KEY, SECRET_KEY
# 在百度云中申请,每天各接口有 500 次调用限制.
from aip import AipBodyAnalysis
""" 你的 APPID AK SK """
APP_ID = '119450434'
API_KEY = 'QzAMoMu31ePIF7aqz61YoYwxu' # 需要替换成你自己的
SECRET_KEY = 'Ib61rAro3GUrxQvdQGEGx1VGd3AHK8TzW' # 需要替换成你自己的
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
# 需要一下三个模式Image、requests、base64
from PIL import Image
import requests
import base64
# 获取 access_token,通行证
def get_access_token():
"""
获取 access_token
"""
# 注*意 SK 与 AK
# client_id 为官网获取的AK, client_secret 为官网获取的SK,其实就是API_KEY和SECRET_KEY
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=QzAMoMu31ePIF7aqz61YoYwxu&client_secret=Ib61rAro3GUrxQvdQGEGx1VGd3AHK8TzW'
response = requests.get(host)
if response:
return response.json()['access_token']
# 人像分割处理部分
def get_foreground(originalImagePath):
"""
人像分割
"""
# 二进制方式打开图片文件
f = open(originalImagePath, 'rb')
img = base64.b64encode(f.read())
# 请求 百度 AI 开放平台
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg?access_token=" + get_access_token()
headers = {'content-type': 'application/x-www-form-urlencoded'}
params = {"image": img}
response = requests.post(request_url, data=params, headers=headers)
# 保存照片
if response:
foreground = response.json()['foreground']
img_data = base64.b64decode(foreground)
img_path = 'my_.jpg' # 保存照片地址和名称,修改处
with open(img_path, 'wb') as f:
f.write(img_data)
return Image.open(img_path)
# 生成各种证件照及格式
''' 此处可以看照片'''
def get_background():
"""
背景图片
"""
color = ('red', 'blue', 'white') # 红色、蓝色和白色
imgs = []
for c in color:
# 一寸照片大小
img = Image.new("RGBA", (295, 413), c)
imgs.append(img)
return imgs
def mian():
fore = get_foreground('my_pp.jpg') # 你原来的照片
p = fore.resize((330, 415))
r,g,b,a = p.split()
''' '''
imgs = get_background()
for img in imgs:
img.paste(p, (-30, 50), mask=a)
img.show()
if __name__ == '__main__':
mian()
# 注:需要替换API_KEY、SECRET_KEY