证件照几乎所有人都会用到,不同证件要求的证件照底色也不同,每种底色都去拍一套照片显得十分繁琐,因此P图换底色成为最佳选择。某信与某付宝也有很多证件照换底小程序,付费换底或者查看广告获取下载权限是个不错的变现途径,甚至可以与本地照相馆合作,你出图他出照片,实现换底出照片一条龙服务,韭菜就得收割到底不是?
![图片[1]-证件照换底色API源码附变现方法-IT吧](http://it8.top/wp-content/uploads/2022/12/20220105190345.png)
本文使用百度AI开放平台提供的免费人像分割API实现抠图,这点百度是很良心的,看过很多同款API,其他都得花钱,免费体验的次数也就几次、几十次调用,而百度直接就是50000/日限制每秒两次并发!况且百度是做AI比较专业的,处理出来的结果很好!
申请地址:
https://ai.baidu.com/tech/body/seg
申请成功创建应用后就能获得API Key
和Secret Key
,开发文档:https://ai.baidu.com/ai-doc/BODY/Fk3cpyxua
直接上代码,懂的人自然会去看文档。
获取授权token
<?php
header("Content-type:application/json");
//初始化 CURL
$ch = curl_init();
//目标服务器地址
curl_setopt($ch, CURLOPT_URL, 'https://aip.baidubce.com/oauth/2.0/token');
//设置上传的文件
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'grant_type' => 'client_credentials',
'client_id' => '填写你的',
'client_secret' => '填写你的'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
//获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//请求头数组
$headers[] = "user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36";
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
//发起请求
$result = curl_exec($ch);
echo $result;
//关闭请求
curl_close($ch);
?>
先把图片转为base64编码,工具地址:http://tool.chinaz.com/tools/imgtobase
百度api请求需要去掉base64图片头,即去掉data:image/jpg;base64,
请求代码
<?php
header("Content-type:text/html;charset=utf-8");
//初始化 CURL
$ch = curl_init();
//目标服务器地址
curl_setopt($ch, CURLOPT_URL, 'https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg');
//设置上传的文件
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'access_token' => '上一步获取到的access_token',
'image' => '这里要用base64去掉图片头的base64代码'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
//获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//请求头数组
$headers[] = "Content-Type:application/x-www-form-urlencoded";
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
//发起请求
$result = curl_exec($ch);
// 解析json
$arr_result = json_decode($result);
$imgurl = $arr_result->foreground;
// 输出图片
echo "<img src='./8.jpg' style='background:#f00'/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#f00'/><br/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#39f'/>";
echo "<img src='data:image/png;base64,".$imgurl."' style='background:#fff'/>";
//关闭请求
curl_close($ch);
?>
这里是用css填充底色,下载的时候不会有底色,其实抠出来的图像是透明底色,正确的处理办法应该是使用PHP的GD库画图。关于PHP的GD库的使用请参考文章:PHP纯代码生成WordPress文章海报图片实现分享功能
将css填充的颜色给用户看,GD库生成的图片提供下载,才是最佳搭配!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容