AiFaceController.php 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. namespace App\Http\Controllers\Web;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Services\Web\AiFaceService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Validator;
  7. use Intervention\Image\ImageManagerStatic as Image;
  8. use Illuminate\Support\Facades\Storage;
  9. use Illuminate\Http\File;
  10. use Log;
  11. class AiFaceController extends Controller
  12. {
  13. private $aiFaceSv;
  14. public function __construct()
  15. {
  16. $this->aiFaceSv = new AiFaceService();
  17. }
  18. // 人臉融合
  19. public function faceMerge(Request $request)
  20. {
  21. $preData = $request->all();
  22. $accessToken = '';
  23. $today = date("Y-m-d");
  24. $tokenData = $this->aiFaceSv->getTokenData();
  25. if (!isset($tokenData)) {
  26. $accessToken = $this->aiFaceSv->getAccessToken()->access_token;
  27. // \Log::info('1111 accessToken: '.$accessToken);
  28. $this->aiFaceSv->setTokenByDay($accessToken,'insert');
  29. } else if (isset($tokenData)&&($tokenData->updateDate!=$today)) {
  30. $accessToken = $this->aiFaceSv->getAccessToken()->access_token;
  31. // \Log::info('2222 accessToken: '.$accessToken);
  32. $this->aiFaceSv->setTokenByDay($accessToken,'update');
  33. } else {
  34. $accessToken = $tokenData->accessToken;
  35. // \Log::info('3333 accessToken: '.$accessToken);
  36. }
  37. // \Log::info('accessToken: '.$accessToken);
  38. $data = $this->aiFaceSv->getMergeData($accessToken, $preData);
  39. return response()->json($data);
  40. }
  41. // save string to db
  42. public function saveData(Request $request)
  43. {
  44. $title = $request->input('title', 'test title');
  45. $desc = $request->input('desc', 'test description');
  46. $shareId = $this->aiFaceSv->getShareId();
  47. $shareId += 1;
  48. $imageName = $shareId.'.jpg';
  49. $this->aiFaceSv->saveShareData($shareId, $title, $desc, $imageName);
  50. $data = [
  51. 'id' => $shareId,
  52. ];
  53. return $data;
  54. }
  55. // save image to server
  56. public function saveImg(Request $request)
  57. {
  58. $id = $request->input('id', '');
  59. $imageO = $request->input('image', '');
  60. // \Log::info('imageO: '.$imageO);
  61. // \Log::info('id: '.$id);
  62. $s3Path = $this->savePhotoToS3($id, $imageO);
  63. // 儲存圖片並產生網址 - 儲存到 local
  64. if (!file_exists('faceMergeImg')) mkdir('faceMergeImg', 0777, true);
  65. $imageName = $id.'.jpg';
  66. $imgPath = public_path('faceMergeImg/' . $imageName);
  67. $imgObj = Image::make($imageO)->save($imgPath);
  68. $imgUrl = url('faceMergeImg/' . $imageName);
  69. // \Log::info('s3Path: '.$s3Path);
  70. $data = [
  71. 'imgUrl' => $s3Path,
  72. ];
  73. return $data;
  74. }
  75. // get meta info from db to front
  76. public function getMeta(Request $request)
  77. {
  78. $id = $request->input('id', '');
  79. $kol = $request->input('kol', '');
  80. $shareData = $this->aiFaceSv->getShareData($id);
  81. // \Log::info($shareData);
  82. return view('shareToFacebook', [
  83. 'webTitle' => $shareData['title'],
  84. 'webDesc' => $shareData['desc'],
  85. 'imagePath' => url('faceMergeImg/' . $shareData['imageName']),
  86. 'kol' => $kol,
  87. ]);
  88. }
  89. /**
  90. * 儲存圖片到 S3
  91. */
  92. private function savePhotoToS3($id, $photo)
  93. {
  94. $folder = 'faceMergeImg';
  95. // \Log::info('folder: '.$folder);
  96. // 儲存路徑
  97. // 原圖
  98. $imgNameOrig = $id . '-orig.jpg';
  99. $imgPathOrig = public_path('faceMergeImg/' . $imgNameOrig);
  100. // 縮圖
  101. $imgName = str_replace('-orig', '', $imgNameOrig);
  102. $imgPath = str_replace('-orig', '', $imgPathOrig);
  103. // 暫存本機端
  104. $imgObj = Image::make($photo)->save($imgPath);
  105. // 儲存 S3
  106. $s3Path = Storage::disk('s3')->putFileAs($folder, new File($imgPath), $imgName);
  107. $s3Url = Storage::disk('s3')->url($s3Path);
  108. unlink($imgPath);
  109. // unlink($imgPathOrig);
  110. return $s3Url;
  111. }
  112. protected function validateInput($rules, $messages)
  113. {
  114. $result = true;
  115. $err_msg = "";
  116. $validate = Validator::make(request()->all(), $rules, $messages);
  117. if ($validate->fails()) {
  118. $result = false;
  119. $err = $validate->errors();
  120. foreach ($err->all() as $item) {
  121. $err_msg .= $item . "\n";
  122. }
  123. }
  124. return (object)[
  125. 'result' => $result,
  126. 'errMsg' => $err_msg
  127. ];
  128. }
  129. public function test()
  130. {
  131. return '123';
  132. }
  133. }