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