牟新芬 3 years ago
parent
commit
4422bcd5a0
3 changed files with 111 additions and 1 deletions
  1. 32 0
      app/api/controller/v1/Pub.php
  2. 2 1
      app/api/route/pub.php
  3. 77 0
      app/common.php

+ 32 - 0
app/api/controller/v1/Pub.php

@@ -19,6 +19,38 @@ class Pub extends BaseController
         return app('json')->success($info);
     }
 
+    /**
+     * 获取图片base64
+     * @param Request $request
+     * @return mixed
+     * @throws Exception
+     */
+    public function get_image_base64(Request $request)
+    {
+        list($imageUrl, $codeUrl) = UtilService::getMore([
+            ['image', ''],
+            ['code', ''],
+        ], $request, true);
+        try {
+            $codeTmp = $code = $codeUrl ? image_to_base64($codeUrl) : false;
+            if (!$codeTmp) {
+                $putCodeUrl = put_image($codeUrl);
+                $code = $putCodeUrl ? image_to_base64($_SERVER['HTTP_HOST'] . '/' . $putCodeUrl) : false;
+                $code ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putCodeUrl);
+            }
+
+            $imageTmp = $image = $imageUrl ? image_to_base64($imageUrl) : false;
+            if (!$imageTmp) {
+                $putImageUrl = put_image($imageUrl);
+                $image = $putImageUrl ? image_to_base64($_SERVER['HTTP_HOST'] . '/' . $putImageUrl) : false;
+                $image ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putImageUrl);
+            }
+            return app('json')->successful(compact('code', 'image'));
+        } catch (Exception $e) {
+            return app('json')->fail($e->getMessage());
+        }
+    }
+
 
     /**
      * 获取仓库列表

+ 2 - 1
app/api/route/pub.php

@@ -13,7 +13,8 @@ use think\Response;
 Route::group('pub',function () {
     //站点信息
     Route::rule('siteResouce', 'v1.pub/siteResouce');
-    //任务
+    //获取图片base64
+    Route::rule('image_base64', 'v1.pub/get_image_base64')->name('getImageBase64');
     Route::rule('warehouse', 'v1.pub/warehouse');
 
 

+ 77 - 0
app/common.php

@@ -207,3 +207,80 @@ function attr_format($arr)
     }
     return [$data, $res];
 }
+
+/**
+ * 获取图片转为base64
+ * @param string $avatar
+ * @return bool|string
+ */
+function image_to_base64($avatar = '', $timeout = 9)
+{
+    try {
+        $url = parse_url($avatar);
+        $url = $url['host'];
+        $header = [
+            'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
+            'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
+            'Accept-Encoding: gzip, deflate, br',
+            'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
+            'Host:' . $url
+        ];
+        $dir = pathinfo($url);
+        $host = $dir['dirname'];
+        $refer = $host . '/';
+        $curl = curl_init();
+        curl_setopt($curl, CURLOPT_REFERER, $refer);
+        curl_setopt($curl, CURLOPT_URL, $avatar);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
+        curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
+        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
+        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
+        $data = curl_exec($curl);
+        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+        curl_close($curl);
+        if ($code == 200) {
+            return "data:image/jpeg;base64," . base64_encode($data);
+        } else {
+            return false;
+        }
+    } catch (\Exception $e) {
+        return false;
+    }
+}
+
+/**
+ * 获取图片转为base64
+ * @param string $avatar
+ * @return bool|string
+ */
+function put_image($url, $filename = '')
+{
+
+    if ($url == '') {
+        return false;
+    }
+    try {
+        if ($filename == '') {
+
+            $ext = pathinfo($url);
+            if ($ext['extension'] != "jpg" && $ext['extension'] != "png" && $ext['extension'] != "jpeg") {
+                return false;
+            }
+            $filename = time() . "." . $ext['extension'];
+        }
+
+        //文件保存路径
+        ob_start();
+        readfile($url);
+        $img = ob_get_contents();
+        ob_end_clean();
+        $path = 'uploads/qrcode';
+        $fp2 = fopen($path . '/' . $filename, 'a');
+        fwrite($fp2, $img);
+        fclose($fp2);
+        return $path . '/' . $filename;
+    } catch (\Exception $e) {
+        return false;
+    }
+}