field('id,english_content,content,ids') ->where('ids',1) ->find(); // 遍历每个图像,进行处理 foreach ($batch as $k => $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" => $template['content'], "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) ]; if (empty($params['type'])) { // 未指定类型,执行链式任务 $insertData['model'] = "gpt-4-vision-preview,"."gpt-4,".$params['selectedOption']; $insertData['model_name'] = '文生图'; // echo "
";print_r($insertData);echo "";die;
$task_id = Db::name('queue_logs')->insertGetId($insertData);
$arr = array_map(function ($item) use ($task_id) {
$item['type'] = '图生文';
$item['chain_next'] = ['文生文', '文生图'];
$item['task_id'] = $task_id;
return $item;
}, $arr);
$payload = [
'task_id' => $task_id,
'data' => $arr
];
Queue::push('app\job\ImageArrJob', $payload, "arrimage");
} else {
// 指定了单一任务
switch ($params['type']) {
case '图生文':
$insertData['model'] = 'gpt-4-vision-preview';
$insertData['model_name'] = '图生文';
break;
case '文生文':
$insertData['model'] = 'gpt-4';
$insertData['model_name'] = '文生文';
break;
case '文生图':
$insertData['model'] = $params['selectedOption'];
$insertData['model_name'] = '文生图';
break;
default:
return false;
}
$task_id = Db::name('queue_logs')->insertGetId($insertData);
$arr = array_map(function ($item) use ($params, $task_id) {
$item['type'] = $params['type'];
$item['task_id'] = $task_id;
return $item;
}, $arr);
$payload = [
'task_id' => $task_id,
'data' => $arr
];
Queue::push('app\job\ImageArrJob', $payload, "arrimage");
}
return true;
}
/**
* 解析图像路径并返回相关信息
*
* @param string $filePath 图像文件路径
* @param int $type 返回类型标识
* @return string|null 返回解析后的路径或文件名
*/
public function sourceDir($filePath, $type) {
$arr = [];
$pathParts = explode('/', $filePath);
$filename = array_pop($pathParts); // 最后是文件名
$baseParts = $pathParts;
// 查找是否有 8 位数字(即日期)文件夹
$date = '';
foreach ($pathParts as $index => $part) {
if (preg_match('/^\d{8}$/', $part)) {
$date = $part;
unset($baseParts[$index]); // 日期不算在 basePath 里
break;
}
}
$arr = [
'basePath' => implode('/', $baseParts),
'date' => $date,
'filename' => $filename
];
// 根据类型返回不同路径
if ($type == 1) {
return $arr["basePath"]; // 只返回基础路径
}
if ($type == 2) {
return '/' . str_replace('/Preview/', '/dall-e/', $arr["basePath"]) . $arr["date"];
}
if ($type == 3) {
return $arr["filename"];
}
}
}