|
|
@@ -212,7 +212,7 @@ class AIGatewayService{
|
|
|
$base64Img = base64_encode($imgData);
|
|
|
$params['init_images'] = ['data:image/png;base64,' . $base64Img];
|
|
|
|
|
|
- $apiUrl = "http://20.0.17.233:45001/sdapi/v1/img2img";
|
|
|
+ $apiUrl = "http://20.0.17.188:45001/sdapi/v1/img2img";
|
|
|
$headers = ['Content-Type: application/json'];
|
|
|
|
|
|
$ch = curl_init();
|
|
|
@@ -260,23 +260,24 @@ class AIGatewayService{
|
|
|
|
|
|
/**
|
|
|
* 图片高清放大
|
|
|
+ * @param string $imageRelPath 原图相对路径(相对 public)
|
|
|
+ * @param array $options 可选参数,可覆盖默认放大配置
|
|
|
+ * @return array
|
|
|
*/
|
|
|
/**
|
|
|
- * 图片高清放大
|
|
|
+ * 图片高清放大(不保存,返回 base64)
|
|
|
* @param string $imageRelPath 原图相对路径(相对 public)
|
|
|
- * @param array $options 可选参数,可覆盖默认放大配置
|
|
|
+ * @param array $options 可选参数
|
|
|
* @return array
|
|
|
*/
|
|
|
public function imgtogqGptApi($imageRelPath, $options = [])
|
|
|
{
|
|
|
- // 构造图片路径
|
|
|
$imgPath = ROOT_PATH . 'public/' . $imageRelPath;
|
|
|
|
|
|
if (!file_exists($imgPath)) {
|
|
|
return ['code' => 1, 'msg' => '原图不存在:' . $imageRelPath];
|
|
|
}
|
|
|
|
|
|
- // 默认放大配置
|
|
|
$defaultParams = [
|
|
|
'resize_mode' => 0,
|
|
|
'show_extras_results' => true,
|
|
|
@@ -291,10 +292,8 @@ class AIGatewayService{
|
|
|
'upscale_first' => false
|
|
|
];
|
|
|
|
|
|
- // 合并配置参数
|
|
|
$params = array_merge($defaultParams, $options);
|
|
|
|
|
|
- // 编码原始图片
|
|
|
try {
|
|
|
$imgData = file_get_contents($imgPath);
|
|
|
if ($imgData === false) {
|
|
|
@@ -305,10 +304,9 @@ class AIGatewayService{
|
|
|
return ['code' => 1, 'msg' => '图片读取失败:' . $e->getMessage()];
|
|
|
}
|
|
|
|
|
|
- $apiUrl = "http://20.0.17.233:45001/sdapi/v1/extra-single-image";
|
|
|
+ $apiUrl = "http://20.0.17.188:45001/sdapi/v1/extra-single-image";
|
|
|
$headers = ['Content-Type: application/json'];
|
|
|
|
|
|
- // 调用接口
|
|
|
$ch = curl_init();
|
|
|
curl_setopt_array($ch, [
|
|
|
CURLOPT_URL => $apiUrl,
|
|
|
@@ -324,17 +322,14 @@ class AIGatewayService{
|
|
|
$curlErr = curl_error($ch);
|
|
|
curl_close($ch);
|
|
|
|
|
|
- // 网络请求失败
|
|
|
if ($curlErr) {
|
|
|
return ['code' => 1, 'msg' => '请求失败:' . $curlErr];
|
|
|
}
|
|
|
|
|
|
- // 状态码错误
|
|
|
if ($httpCode !== 200) {
|
|
|
return ['code' => 1, 'msg' => 'API请求失败,HTTP状态码:' . $httpCode];
|
|
|
}
|
|
|
|
|
|
- // 解析响应
|
|
|
$data = json_decode($response, true);
|
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
|
return ['code' => 1, 'msg' => 'API返回数据解析失败:' . json_last_error_msg()];
|
|
|
@@ -344,39 +339,126 @@ class AIGatewayService{
|
|
|
return ['code' => 1, 'msg' => '接口未返回有效的图像数据'];
|
|
|
}
|
|
|
|
|
|
- // 保存新图片
|
|
|
- try {
|
|
|
- $baseName = pathinfo($imageRelPath, PATHINFO_FILENAME);
|
|
|
- $ext = pathinfo($imageRelPath, PATHINFO_EXTENSION);
|
|
|
- $outputDir = 'uploads/extra_image/';
|
|
|
- $outputPath = ROOT_PATH . 'public/' . $outputDir;
|
|
|
-
|
|
|
- if (!is_dir($outputPath)) {
|
|
|
- mkdir($outputPath, 0755, true);
|
|
|
- }
|
|
|
-
|
|
|
- $saveFileName = $baseName . '-hd.' . $ext;
|
|
|
- $saveFullPath = $outputPath . $saveFileName;
|
|
|
- $resultImg = base64_decode($data['image']);
|
|
|
-
|
|
|
- if ($resultImg === false || file_put_contents($saveFullPath, $resultImg) === false) {
|
|
|
- throw new Exception('保存图片失败');
|
|
|
- }
|
|
|
-
|
|
|
- return [
|
|
|
- 'code' => 0,
|
|
|
- 'msg' => '高清图生成成功',
|
|
|
- 'data' => [
|
|
|
- 'url' => '/' . $outputDir . $saveFileName,
|
|
|
- 'original_size' => filesize($imgPath),
|
|
|
- 'processed_size' => filesize($saveFullPath),
|
|
|
- 'resolution' => getimagesize($saveFullPath)
|
|
|
- ]
|
|
|
- ];
|
|
|
- } catch (Exception $e) {
|
|
|
- return ['code' => 1, 'msg' => '保存失败:' . $e->getMessage()];
|
|
|
- }
|
|
|
+ return [
|
|
|
+ 'code' => 0,
|
|
|
+ 'msg' => '高清图生成成功',
|
|
|
+ 'data' => [
|
|
|
+ 'base64_image' => $data['image'],
|
|
|
+ 'original_size' => strlen($imgData),
|
|
|
+ 'processed_size' => strlen(base64_decode($data['image']))
|
|
|
+ ]
|
|
|
+ ];
|
|
|
}
|
|
|
+// public function imgtogqGptApi($imageRelPath, $options = [])
|
|
|
+// {
|
|
|
+// // 构造图片路径
|
|
|
+// $imgPath = ROOT_PATH . 'public/' . $imageRelPath;
|
|
|
+//
|
|
|
+// if (!file_exists($imgPath)) {
|
|
|
+// return ['code' => 1, 'msg' => '原图不存在:' . $imageRelPath];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 默认放大配置
|
|
|
+// $defaultParams = [
|
|
|
+// 'resize_mode' => 0,
|
|
|
+// 'show_extras_results' => true,
|
|
|
+// 'gfpgan_visibility' => 0,
|
|
|
+// 'codeformer_visibility' => 0,
|
|
|
+// 'codeformer_weight' => 0,
|
|
|
+// 'upscaling_resize' => 2.45,
|
|
|
+// 'upscaling_crop' => true,
|
|
|
+// 'upscaler_1' => 'R-ESRGAN 4x+ Anime6B',
|
|
|
+// 'upscaler_2' => 'None',
|
|
|
+// 'extras_upscaler_2_visibility' => 0,
|
|
|
+// 'upscale_first' => false
|
|
|
+// ];
|
|
|
+//
|
|
|
+// // 合并配置参数
|
|
|
+// $params = array_merge($defaultParams, $options);
|
|
|
+//
|
|
|
+// // 编码原始图片
|
|
|
+// try {
|
|
|
+// $imgData = file_get_contents($imgPath);
|
|
|
+// if ($imgData === false) {
|
|
|
+// throw new Exception('无法读取图片文件');
|
|
|
+// }
|
|
|
+// $params['image'] = base64_encode($imgData);
|
|
|
+// } catch (Exception $e) {
|
|
|
+// return ['code' => 1, 'msg' => '图片读取失败:' . $e->getMessage()];
|
|
|
+// }
|
|
|
+//
|
|
|
+// $apiUrl = "http://20.0.17.188:45001/sdapi/v1/extra-single-image";
|
|
|
+// $headers = ['Content-Type: application/json'];
|
|
|
+//
|
|
|
+// // 调用接口
|
|
|
+// $ch = curl_init();
|
|
|
+// curl_setopt_array($ch, [
|
|
|
+// CURLOPT_URL => $apiUrl,
|
|
|
+// CURLOPT_RETURNTRANSFER => true,
|
|
|
+// CURLOPT_POST => true,
|
|
|
+// CURLOPT_HTTPHEADER => $headers,
|
|
|
+// CURLOPT_POSTFIELDS => json_encode($params),
|
|
|
+// CURLOPT_TIMEOUT => 120
|
|
|
+// ]);
|
|
|
+//
|
|
|
+// $response = curl_exec($ch);
|
|
|
+// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
|
+// $curlErr = curl_error($ch);
|
|
|
+// curl_close($ch);
|
|
|
+//
|
|
|
+// // 网络请求失败
|
|
|
+// if ($curlErr) {
|
|
|
+// return ['code' => 1, 'msg' => '请求失败:' . $curlErr];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 状态码错误
|
|
|
+// if ($httpCode !== 200) {
|
|
|
+// return ['code' => 1, 'msg' => 'API请求失败,HTTP状态码:' . $httpCode];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 解析响应
|
|
|
+// $data = json_decode($response, true);
|
|
|
+// if (json_last_error() !== JSON_ERROR_NONE) {
|
|
|
+// return ['code' => 1, 'msg' => 'API返回数据解析失败:' . json_last_error_msg()];
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (empty($data['image'])) {
|
|
|
+// return ['code' => 1, 'msg' => '接口未返回有效的图像数据'];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 保存新图片
|
|
|
+// try {
|
|
|
+// $baseName = pathinfo($imageRelPath, PATHINFO_FILENAME);
|
|
|
+// $ext = pathinfo($imageRelPath, PATHINFO_EXTENSION);
|
|
|
+// $outputDir = 'uploads/extra_image/';
|
|
|
+// $outputPath = ROOT_PATH . 'public/' . $outputDir;
|
|
|
+//
|
|
|
+// if (!is_dir($outputPath)) {
|
|
|
+// mkdir($outputPath, 0755, true);
|
|
|
+// }
|
|
|
+//
|
|
|
+// $saveFileName = $baseName . '-hd.' . $ext;
|
|
|
+// $saveFullPath = $outputPath . $saveFileName;
|
|
|
+// $resultImg = base64_decode($data['image']);
|
|
|
+//
|
|
|
+// if ($resultImg === false || file_put_contents($saveFullPath, $resultImg) === false) {
|
|
|
+// throw new Exception('保存图片失败');
|
|
|
+// }
|
|
|
+//
|
|
|
+// return [
|
|
|
+// 'code' => 0,
|
|
|
+// 'msg' => '高清图生成成功',
|
|
|
+// 'data' => [
|
|
|
+// 'url' => '/' . $outputDir . $saveFileName,
|
|
|
+// 'original_size' => filesize($imgPath),
|
|
|
+// 'processed_size' => filesize($saveFullPath),
|
|
|
+// 'resolution' => getimagesize($saveFullPath)
|
|
|
+// ]
|
|
|
+// ];
|
|
|
+// } catch (Exception $e) {
|
|
|
+// return ['code' => 1, 'msg' => '保存失败:' . $e->getMessage()];
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
/**
|
|
|
* 通用 API 调用方法(支持重试机制)
|