Python小技 不到100行代码制作各种证件照

生活中经常需要使用各种版本的电子版证件照,如:红底、蓝底、白底、一寸、两寸等等。
在 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
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值