大家都知道在我们生活中常常需要使用各种版本的电子版证件照,例如:红底,蓝底,白底,一寸,两寸等。在python中替换图片背景颜色可以用image模块,利用image模块可以改变图片的大小,背景颜色等操作这里使用我偶像的照片。
人像分离
第一步将原图片中的人物与背景分离,我们使用百度AI 开放平台中的人像分割功能,它的免费版有50000次/天。使用百度的产品都知道需要一个 S 和 AK。
下面是代码:
def get_access_token(self): """ 获取 access_token """ # 注意 SK 与 AK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=ak&client_secret=sk' response = requests.get(host) if response: return response.json()['access_token']def get_foreground(self, originalImagePath, ): """ 人像分割 """ # 二进制方式打开图片文件 f = open(originalImagePath, 'rb') img = base64.b64encode(f.read()) params = {"image": img} # 请求 百度 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) # 人像图片存放地址 foreground_path = 'foreground.png' with open(foreground_path, 'wb') as f: f.write(img_data)
结果:
然后我们再创建背景图片
第二步将创建一个底色为红色、蓝色、白色的图片,它的大小为一寸(295px × 413px)和二寸(413px × 579px)。
def get_background(): """ 背景图片 """ color = ('red', 'blue', 'white') imgs = [] for c in color: # 一寸照片大小 img = Image.new("RGBA", (295, 413), c) imgs.append(img) return imgs
最后一步合并图片
第三步将红蓝白背景图与人像图片合并,这里需要使用 Image 模块的resize() 将人像图片裁剪到合适的像素,再使用 paste() 方法将图像合并。
def main(): fore = get_foreground('original.jpg') # 将图像裁剪到合适的像素 p = fore.resize((330, 415)) # 分离图片 r,g,b,a = p.split() imgs = get_background() for img in imgs: # 将底色图像和人物图像合并,mask参数为去掉透明背景色 img.paste(p, (-30, 50), mask = a) img.show()
结果:
结语
使用Image 模块可以制作我们需要的各种电子版证件照,如果将背景图换成风景图我们就可以在朋友圈旅游了。
以上就是小编今天带来的内容,小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴可关注小编,并在后台私信小编:“ 01 ” 即可领取