liuhairui 6 сар өмнө
parent
commit
ef9d9750c2

+ 32 - 39
application/api/controller/WorkOrder.php

@@ -26,13 +26,19 @@ class WorkOrder extends Api
         $this->success('任务成功提交至队列');
     }
 
+
+    /**
+     * 图生图
+     * /sdapi/v1/img2img
+     */
     public function imgtowimg()
     {
         $prompt = $this->request->param('prompt', '');
-        $denoising = (float)$this->request->param('denoising_strength', 0.2);//重绘幅度
-        $modelName = $this->request->param('model', 'realisticVisionV51_v51VAE-inpainting.safetensors [f0d4872d24]');
+        $denoising = (float)$this->request->param('denoising_strength', 0.2); // 重绘幅度
         $scale = (float)$this->request->param('scale', 2.0); // 放大倍数
+        $modelName = $this->request->param('model', 'realisticVisionV51_v51VAE-inpainting.safetensors [f0d4872d24]');
 
+        //原图路径
         $imgRelPath = 'uploads/operate/ai/Preview/arr/0828004096727.png';
         $imgPath = ROOT_PATH . 'public/' . $imgRelPath;
 
@@ -40,26 +46,32 @@ class WorkOrder extends Api
             return json(['code' => 1, 'msg' => '原图不存在:' . $imgRelPath]);
         }
 
-        // 编码原图为 base64
+        list($originW, $originH) = getimagesize($imgPath);
+        $targetW = intval($originW * $scale);
+        $targetH = intval($originH * $scale);
+
+        // 将原图转为 base64
         $imgData = file_get_contents($imgPath);
         $base64Img = base64_encode($imgData);
         $initImage = 'data:image/png;base64,' . $base64Img;
 
-        // 构造接口请求数据(宽高不传)
+        // 构造请求体
         $postData = json_encode([
             'prompt' => $prompt,
             'steps' => 30,
             'cfg_scale' => 7,
-            'inpainting_fill' => 1,
-
             'denoising_strength' => $denoising,
+            'width' => $targetW,
+            'height' => $targetH,
+            'resize_mode' => 1, // 缩放模式
+            'inpaint_full_res' => true,
+            'inpainting_fill' => 1,
             'init_images' => [$initImage],
             'override_settings' => [
                 'sd_model_checkpoint' => $modelName
             ]
         ]);
 
-        // 发送 POST 请求到 img2img 接口
         $apiUrl = "http://20.0.17.233:45001/sdapi/v1/img2img";
         $headers = ['Content-Type: application/json'];
 
@@ -83,7 +95,7 @@ class WorkOrder extends Api
             return json(['code' => 1, 'msg' => '接口未返回图像数据']);
         }
 
-        // 保存原始生成图
+        // 保存生成图
         $resultImg = base64_decode($data['images'][0]);
         $saveDir = ROOT_PATH . 'public/uploads/img/';
         if (!is_dir($saveDir)) {
@@ -94,39 +106,9 @@ class WorkOrder extends Api
         $savePath = $saveDir . $fileName;
         file_put_contents($savePath, $resultImg);
 
-        // 放大图像处理
-        $imageResource = imagecreatefromstring($resultImg);
-        if ($imageResource && $scale > 1) {
-            $originW = imagesx($imageResource);
-            $originH = imagesy($imageResource);
-            $scaledW = (int)($originW * $scale);
-            $scaledH = (int)($originH * $scale);
-
-            $resized = imagecreatetruecolor($scaledW, $scaledH);
-            imagecopyresampled($resized, $imageResource, 0, 0, 0, 0, $scaledW, $scaledH, $originW, $originH);
-
-            $zoomName = 'img2img_zoom_' . date('Ymd_His') . '_' . mt_rand(1000, 9999) . '.png';
-            $zoomPath = $saveDir . $zoomName;
-            imagepng($resized, $zoomPath);
-
-            imagedestroy($resized);
-            imagedestroy($imageResource);
-
-            return json([
-                'code' => 0,
-                'msg' => '生成并放大成功',
-                'data' => [
-//                    'origin_url' => '/uploads/img/' . $fileName,
-                    'zoom_url' => '/uploads/img/' . $zoomName
-                ]
-            ]);
-        }
-
-
-        
         return json([
             'code' => 0,
-            'msg' => '生成成功(未放大)',
+            'msg' => '图像生成成功',
             'data' => [
                 'origin_url' => '/uploads/img/' . $fileName
             ]
@@ -134,6 +116,17 @@ class WorkOrder extends Api
     }
 
 
+    // 后期图片处理
+    /**
+     * 后期图片处理
+     * /sdapi/v1/extra-single-image
+     */
+    public function extra_image()
+    {
+
+    }
+
+
     /**
      * 查询队列列表
      * 统计文件对应的队列情况