证件照几乎所有人都会用到,不同证件要求的证件照底色也不同,每种底色都去拍一套照片显得十分繁琐,因此P图换底色成为最佳选择。某信与某付宝也有很多证件照换底小程序,付费换底或者查看广告获取下载权限是个不错的变现途径,甚至可以与本地照相馆合作,你出图他出照片,实现换底出照片一条龙服务,韭菜就得收割到底不是?
本文使用百度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库生成的图片提供下载,才是最佳搭配!
小程序源码没有,应该不难。本文来自吾爱破解,修改文章部分内容不保证正确!
评论 (1)