123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
-
- namespace App\Http\Controllers\Web;
-
- use App\Http\Controllers\Controller;
- use App\Http\Services\Web\AiFaceService;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Validator;
- use Intervention\Image\ImageManagerStatic as Image;
- use Illuminate\Support\Facades\Storage;
- use Illuminate\Http\File;
- use Log;
-
- class AiFaceController extends Controller
- {
-
- private $aiFaceSv;
-
- public function __construct()
- {
- $this->aiFaceSv = new AiFaceService();
-
- }
-
- // 人臉融合
- public function faceMerge(Request $request)
- {
- $preData = $request->all();
- $accessToken = '';
- $today = date("Y-m-d");
-
- $tokenData = $this->aiFaceSv->getTokenData();
-
- if (!isset($tokenData)) {
-
- $accessToken = $this->aiFaceSv->getAccessToken()->access_token;
- // \Log::info('1111 accessToken: '.$accessToken);
-
- $this->aiFaceSv->setTokenByDay($accessToken,'insert');
-
- } else if (isset($tokenData)&&($tokenData->updateDate!=$today)) {
-
- $accessToken = $this->aiFaceSv->getAccessToken()->access_token;
- // \Log::info('2222 accessToken: '.$accessToken);
-
- $this->aiFaceSv->setTokenByDay($accessToken,'update');
-
- } else {
-
- $accessToken = $tokenData->accessToken;
- // \Log::info('3333 accessToken: '.$accessToken);
-
- }
- // \Log::info('accessToken: '.$accessToken);
- $data = $this->aiFaceSv->getMergeData($accessToken, $preData);
-
- return response()->json($data);
- }
-
- // save string to db
- public function saveData(Request $request)
- {
- $title = $request->input('title', 'test title');
- $desc = $request->input('desc', 'test description');
-
- $shareId = $this->aiFaceSv->getShareId();
- $shareId += 1;
-
- $imageName = $shareId.'.jpg';
-
- $this->aiFaceSv->saveShareData($shareId, $title, $desc, $imageName);
-
- $data = [
- 'id' => $shareId,
- ];
-
- return $data;
- }
-
- // save image to server
- public function saveImg(Request $request)
- {
- $id = $request->input('id', '');
- $imageO = $request->input('image', '');
-
- // \Log::info('imageO: '.$imageO);
- // \Log::info('id: '.$id);
-
- $s3Path = $this->savePhotoToS3($id, $imageO);
-
- // 儲存圖片並產生網址 - 儲存到 local
-
- if (!file_exists('faceMergeImg')) mkdir('faceMergeImg', 0777, true);
-
- $imageName = $id.'.jpg';
-
- $imgPath = public_path('faceMergeImg/' . $imageName);
-
- $imgObj = Image::make($imageO)->save($imgPath);
- $imgUrl = url('faceMergeImg/' . $imageName);
-
- // \Log::info('s3Path: '.$s3Path);
-
- $data = [
- 'imgUrl' => $s3Path,
- ];
-
- return $data;
- }
-
- // get meta info from db to front
- public function getMeta(Request $request)
- {
- $id = $request->input('id', '');
- $kol = $request->input('kol', '');
-
- $shareData = $this->aiFaceSv->getShareData($id);
- // \Log::info($shareData);
-
- return view('shareToFacebook', [
- 'webTitle' => $shareData['title'],
- 'webDesc' => $shareData['desc'],
- 'imagePath' => url('faceMergeImg/' . $shareData['imageName']),
- 'kol' => $kol,
- ]);
-
- }
-
- /**
- * 儲存圖片到 S3
- */
- private function savePhotoToS3($id, $photo)
- {
- $folder = 'faceMergeImg';
- // \Log::info('folder: '.$folder);
-
- // 儲存路徑
- // 原圖
- $imgNameOrig = $id . '-orig.jpg';
-
- $imgPathOrig = public_path('faceMergeImg/' . $imgNameOrig);
- // 縮圖
- $imgName = str_replace('-orig', '', $imgNameOrig);
- $imgPath = str_replace('-orig', '', $imgPathOrig);
- // 暫存本機端
- $imgObj = Image::make($photo)->save($imgPath);
-
-
- // 儲存 S3
- $s3Path = Storage::disk('s3')->putFileAs($folder, new File($imgPath), $imgName);
- $s3Url = Storage::disk('s3')->url($s3Path);
-
- unlink($imgPath);
- // unlink($imgPathOrig);
-
- return $s3Url;
- }
-
- protected function validateInput($rules, $messages)
- {
- $result = true;
- $err_msg = "";
-
- $validate = Validator::make(request()->all(), $rules, $messages);
-
- if ($validate->fails()) {
- $result = false;
- $err = $validate->errors();
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- }
-
- return (object)[
- 'result' => $result,
- 'errMsg' => $err_msg
- ];
- }
- public function test()
- {
- return '123';
- }
-
- }
|