1、先创建一个类文件,用于实例化
<?php
namespace app\wx\controller;
use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
//人像动漫化
use AlibabaCloud\SDK\Facebody\V20191230\Models\GenerateHumanAnimeStyleRequest;
//智能美肤
use AlibabaCloud\SDK\Facebody\V20191230\Models\RetouchSkinRequest;
//智能瘦脸
use AlibabaCloud\SDK\Facebody\V20191230\Models\LiquifyFaceRequest;
//人像素描
use AlibabaCloud\SDK\Facebody\V20191230\Models\GenerateHumanSketchStyleRequest;
//人脸修复增强
use AlibabaCloud\SDK\Facebody\V20191230\Models\EnhanceFaceRequest;
//人脸美颜
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceBeautyRequest;
//人脸美妆
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceMakeupRequest;
//人脸滤镜
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceFilterRequest;
//人脸美型
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceTidyupRequest;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return Facebody Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
$config = new Config([
// 必填,您的 AccessKey ID
"accessKeyId" => $accessKeyId,
// 必填,您的 AccessKey Secret
"accessKeySecret" => $accessKeySecret
]);
// Endpoint 请参考 https://api.aliyun.com/product/facebody
$config->endpoint = "facebody.cn-shanghai.aliyuncs.com";
return new Facebody($config);
}
//$argv参数是一个数组,包含原图的oss地址,和一些其他的参数,注意oss必须为上海地区的,其他地区的不行,上传本地图片的我没试,不知道能不能行的通
public static function main($type=0,$argv){
// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
$client = self::createClient('这里替换成你自己的accessKeyId','这里替换成你自己的accessKeySecret');
//我这里使用了type判断,用于实现传入不同的type,实现不同的特效,特效名可以参考上方的use部分,你也可以把不需要的特效删除,$type是调用这个类传过来的
if($type==1){
$generateHumanAnimeStyleRequest = new GenerateHumanAnimeStyleRequest($argv);
}else if($type==2){
$retouchSkinRequest = new RetouchSkinRequest($argv);
}else if($type==3){
$liquifyFaceRequest = new LiquifyFaceRequest($argv);
}else if($type==4){
$generateHumanSketchStyleRequest = new GenerateHumanSketchStyleRequest($argv);
}else if($type==5){
$enhanceFaceRequest = new EnhanceFaceRequest($argv);
}else if($type==6){
$faceBeautyRequest = new FaceBeautyRequest($argv);
}else if($type==7){
$faceMakeupRequest = new FaceMakeupRequest($argv);
}else if($type==8){
$faceFilterRequest = new FaceFilterRequest($argv);
}else if($type==9){
$faceTidyupRequest = new FaceTidyupRequest($argv);
}
$runtime = new RuntimeOptions([]);
try {
// 复制代码运行请自行打印 API 的返回值
//这里的type判断,跟上面的一样,也是为了实现不同的特效,接收返回的结果,你也可以把不需要的特效删除,$type是调用这个类传过来的
if($type==1){
$resp=$client->generateHumanAnimeStyleWithOptions($generateHumanAnimeStyleRequest, $runtime);
}else if($type==2){
$resp=$client->retouchSkinWithOptions($retouchSkinRequest, $runtime);
}else if($type==3){
$resp=$client->liquifyFaceWithOptions($liquifyFaceRequest, $runtime);
}else if($type==4){
$resp=$client->generateHumanSketchStyleWithOptions($generateHumanSketchStyleRequest, $runtime);
}else if($type==5){
$resp=$client->enhanceFaceWithOptions($enhanceFaceRequest, $runtime);
}else if($type==6){
$resp=$client->faceBeautyWithOptions($faceBeautyRequest, $runtime);
}else if($type==7){
$resp=$client->faceMakeupWithOptions($faceMakeupRequest, $runtime);
}else if($type==8){
$resp=$client->faceFilterWithOptions($faceFilterRequest, $runtime);
}else if($type==9){
$resp=$client->faceTidyupWithOptions($faceTidyupRequest, $runtime);
}
return $resp;
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 如有需要,请打印 error
$resp=Utils::assertAsString($error->message);
return $resp;
}
}
}
2.编写调用这个类的方法
/*
*人像动漫化
*/
public function generateHumanAnime()
{
// 获取参数
$params=$this->params;
//$params['type']是前端传过来的参数,例如:anime代表日漫风,handdrawn代表手绘风等等
//$params['url']是前端传过来的oss地址,且oss必须为上海地区的。本地图片的我没试
$argv=([
"algoType" => $params['type'],
"imageURL" => $params['url']
]);
$resp=$this->main(1,$argv);
if(empty($resp->body)){
//调用失败的话,可以自行打印$resp的内容
//return_msg是我自己定义的一个方法,用于返回统一的格式
$this->return_msg(400,'请求失败');
}else{
//调用成功,第一步的方法里$resp会返回下面两个字段:imageURL和requestId,如果生成的图片有问题,可以凭借requestId去联系阿里云的客服,他们会给你详细的解答
$data['imageURL']=$resp->body->data->imageURL;
$data['requestId']=$resp->body->requestId;
$this->return_msg(200,'请求成功',$data);
}
}
最后:这个功能是闲来无事自己摸索出来的,如果有表述不对的地方,还请指出,谢谢