$v) { $baseItem = [ "sourceDir" => $this->sourceDir($v, 1), // 获取源目录 "outputDir" => $this->sourceDir($v, 2), // 获取输出目录 "file_name" => $this->sourceDir($v, 3), // 获取文件名 "type" => $params['type'] ?? '', // 获取处理类型 "selectedOption" => $params['selectedOption'], //生图模型参数 "prompt" => $params['prompt'], // 获取处理提示 "width" => $params['width'], // 获取图像宽度 "height" => $params['height'] // 获取图像高度 ]; // 创建$num个相同的项目并合并到$arr $arr = array_merge($arr, array_fill(0, $num, $baseItem)); } // 设置基础字段 $insertData = [ 'create_time' => date('Y-m-d H:i:s'), 'old_image_file' => $params['old_image_file'], 'status' => '等待中', 'image_count' => count($arr), 'params' => json_encode($params, JSON_UNESCAPED_UNICODE) ]; // 根据任务类型设定模型 switch ($params['type']) { case '图生文': $insertData['model'] = 'gpt-4-vision-preview'; break; case '文生文': $insertData['model'] = 'gpt-4'; break; case '文生图': $insertData['model'] = $params['selectedOption'] ?? '未知模型'; break; default: // 混合任务或自定义模型逻辑 $selected = $params['selectedOption'] ?? '未知'; $insertData['model'] = "gpt-4-vision-preview,gpt-4,{$selected}"; break; } // 插入并获取任务 ID $task_id = Db::name('queue_logs')->insertGetId($insertData); // 推送到队列 $payload = [ 'task_id' => $task_id, 'data' => $arr ]; //测试查看推送队列前的数据 // echo "
";print_r($payload);echo "";die;
// 推送队列
Queue::push('app\job\ImageArrJob', $payload, "arrimage");
}
/**
* 解析图像路径并返回相关信息
*
* @param string $filePath 图像文件路径
* @param int $type 返回类型标识
* @return string|null 返回解析后的路径或文件名
*/
public function sourceDir($filePath,$type){
$arr = [];
// 使用正则表达式匹配完整路径
if (preg_match('/^(.+?)\/Preview\/(\d{8})\/(.+)$/', $filePath, $matches)) {
$arr = [
'basePath' => $matches[1], // 基础路径
'date' => $matches[2], // 日期 (YYYYMMDD)
'filename' => $matches[3] // 文件名
];
}else{
// 备用方案:如果正则匹配失败
$pathParts = explode('/', $filePath);
$filename = array_pop($pathParts);
$date = '';
$baseParts = [];
foreach ($pathParts as $part) {
if (preg_match('/^\d{8}$/', $part)) {
$date = $part;
break;
}
$baseParts[] = $part;
}
$arr = [
'basePath' => implode('/', $baseParts),
'date' => $date,
'filename' => $filename
];
}
// 根据类型返回不同的路径
if ($type == 1) {
return $arr["basePath"] . "/Preview/" . $arr["date"]; // 返回预览目录
}
if ($type == 2) {
return '/' . $arr["basePath"] . "/dall-e/" . $arr["date"]; // 返回输出目录
}
if($type==3){
return $arr["filename"]; // 返回图片名称
}
}
}