소스 검색

邀请海报

wzq 5 년 전
부모
커밋
76c168e63a
4개의 변경된 파일110개의 추가작업 그리고 1개의 파일을 삭제
  1. 24 0
      app/Http/Controllers/PosterController.php
  2. 83 1
      app/Repositories/PosterRepository.php
  3. BIN
      public/image/invite/main.png
  4. 3 0
      routes/api.php

+ 24 - 0
app/Http/Controllers/PosterController.php

@@ -21,6 +21,9 @@ class PosterController extends Controller
     {
     }
 
+    /**
+     * 分享内容海报
+     */
     public function post(Request $request)
     {
         $validator = Validator::make($request->all(), [
@@ -44,4 +47,25 @@ class PosterController extends Controller
 
         return $imageRepository->post($main,$userInfo,$request['id'],$key);
     }
+
+    /**
+     * 邀请海报
+     */
+    public function invite()
+    {
+        $userInfo = $this->getUserInfo();
+        if(!$userInfo){
+            return jsonError('获取用户信息失败');
+        }
+        $bean = 500;
+        $key = 'share_invite_uid'.$userInfo['uid'].'bean_'.$bean;
+        $url = Redis::get($key);
+        if($url) return jsonSuccess($url);
+
+        // 合成基本图
+        $main = public_path('/image/invite/main.png');
+        $imageRepository = new PosterRepository($main);
+
+        return $imageRepository->invite($main,$userInfo,$key,$bean);
+    }
 }

+ 83 - 1
app/Repositories/PosterRepository.php

@@ -27,7 +27,7 @@ class PosterRepository
     }
 
     /**
-     * 分享帖子生成海报
+     * 分享内容海报
      */
     public function post($mainImg,$userInfo,$id,$key)
     {
@@ -141,4 +141,86 @@ class PosterRepository
 
         return jsonSuccess($url);
     }
+
+    /**
+     * 邀请海报
+     */
+    public function invite($mainImg,$userInfo,$key, $bean)
+    {
+        $main = ImageManagerStatic::make($mainImg);
+
+        if(!$userInfo['username']){
+            $userInfo['username'] = '';
+        }
+
+        // 彩虹豆数
+        $beanWidth = 194;
+        if(strlen($bean) == 4) $beanWidth = 182;
+        $main->text($bean, $beanWidth, 1060, function ($font) {
+            $font->file(public_path('font/PingFang Bold.ttf'));
+            $font->size(36);
+            $font->color('#C74A48');
+            $font->align('left');
+        });
+
+        // 邀请码
+        if($userInfo['invite_code']){
+            $str = $userInfo['invite_code'];
+            $strLower = strtolower($str);
+            $upperNumber = 0;
+            for($i=0;$i<6;$i++){
+                if($str[$i] != $strLower[$i]) $upperNumber++;
+            }
+            $codeWidth = 212 - $upperNumber * 3;
+            $main->text($str, $codeWidth, 912, function ($font) {
+                $font->file(public_path('font/PingFang Regular.ttf'));
+                $font->size(28);
+                $font->color('#3C5852');
+                $font->align('left');
+            });
+        }
+
+        // 用户名称
+        $main->text($userInfo['username'], 30, 860, function ($font) {
+            $font->file(public_path('font/PingFang Regular.ttf'));
+            $font->size(28);
+            $font->color('#3C5852');
+            $font->align('left');
+        });
+        // 用户头像
+        if($userInfo['avatar']){
+            $avatar = Image::make($userInfo['avatar'])->resize(88,88);
+            $new= Image::canvas(750, 1346);
+            $r=$avatar->width() /2;
+            for($x=0;$x<$avatar->width();$x++) {
+
+                for($y=0;$y<$avatar->height();$y++) {
+
+                    $c=$avatar->pickColor($x,$y,'array');
+
+                    if(((($x-$r) * ($x-$r) + ($y-$r) * ($y-$r)) < ($r*$r))) {
+                        $new->pixel($c,$x,$y);
+                    }
+
+                }
+            }
+
+            $main->insert($new, 'top-left', 30, 717);
+        }
+
+        $qrcode = Image::make(QrCode::format('png')->generate('https://www.jianshu.com/p/1c78294f26f8'));
+
+        $qrcode->resize(170,170);
+
+        $main->insert($qrcode,'top-left', 547, 944);
+
+        // 存储图片
+        $filename = date('Ym').'/'.time() . '_' . uniqid() . '.jpg';
+        Storage::put($filename, (string)$main->encode('jpg'));
+        $url = 'http://oss.caihongxingqiu.net/'.$filename;
+        Redis::set($key, $url);
+        Redis::expire($key, 3600 * 24 * 3);
+
+        return jsonSuccess($url);
+    }
 }

BIN
public/image/invite/main.png


+ 3 - 0
routes/api.php

@@ -22,7 +22,10 @@ $api->version('v1', [
         $api->post('upload', 'UploadController@uploadImage');
         $api->post('multi_upload', 'UploadController@uploadImages');
 
+        //分享内容海报
         $api->get('poster/post', 'PosterController@post');
+        //邀请海报
+        $api->get('poster/invite', 'PosterController@invite');
     });
     //登录+验签
     $api->group(['middleware' => ['chxq_jwt_auth','chxq_sign']], function ($api) {