fix(image): 修复图片生成和编辑请求中尺寸参数传递问题
- 添加 resolveRequestSize 函数处理尺寸参数解析逻辑 - 将 pixelSize 变量重命名为 requestSize 以提高代码可读性 - 修复当尺寸为 auto 时不发送 size 参数的功能 - 确保所有非 auto 尺寸值都会正确传递到请求中 - 更新图片生成和编辑函数中的尺寸参数处理逻辑
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# 待测试
|
||||
|
||||
- 修复画布和生图工作台选择图片尺寸后,请求图片生成/编辑接口未携带 `size` 参数的问题;`auto` 不传,其余比例或像素尺寸会随请求发送。
|
||||
- 修复生图工作台和画布生图请求中 `quality` 参数可能传入上游不支持值导致 400 的问题;请求前会归一化质量枚举,`auto` 或异常值不再发送给上游。
|
||||
- 管理后台新增/编辑渠道时,渠道可用模型支持通过弹窗按“新获取、已有”分组选择,并可在弹窗内手动增加模型或拉取模型列表后再写回表单。
|
||||
- 管理后台编辑渠道时,API Key 留空不再触发必填校验,表示沿用已保存的密钥;新增渠道仍要求填写 API Key。
|
||||
|
||||
@@ -63,6 +63,13 @@ function resolveSize(quality: string, ratio: string): string | undefined {
|
||||
return `${width}x${height}`;
|
||||
}
|
||||
|
||||
function resolveRequestSize(quality: string | undefined, size: string) {
|
||||
const value = size.trim();
|
||||
if (!value || value === "auto") return undefined;
|
||||
if (/^\d+x\d+$/.test(value)) return value;
|
||||
return (quality && resolveSize(quality, value)) || value;
|
||||
}
|
||||
|
||||
function resolveImageDataUrl(item: Record<string, unknown>) {
|
||||
if (typeof item.b64_json === "string" && item.b64_json) {
|
||||
return `data:image/png;base64,${item.b64_json}`;
|
||||
@@ -146,7 +153,7 @@ function withSystemMessage(config: AiConfig, messages: ChatCompletionMessage[])
|
||||
export async function requestGeneration(config: AiConfig, prompt: string) {
|
||||
const n = Math.max(1, Math.min(15, Math.floor(Math.abs(Number(config.count)) || 1)));
|
||||
const quality = normalizeQuality(config.quality);
|
||||
const pixelSize = quality ? resolveSize(quality, config.size) : undefined;
|
||||
const requestSize = resolveRequestSize(quality, config.size);
|
||||
try {
|
||||
const response = await axios.post<ImageApiResponse>(
|
||||
aiApiUrl(config, "/images/generations"),
|
||||
@@ -155,7 +162,7 @@ export async function requestGeneration(config: AiConfig, prompt: string) {
|
||||
prompt: withSystemPrompt(config, prompt),
|
||||
n,
|
||||
...(quality ? { quality } : {}),
|
||||
...(pixelSize ? { size: pixelSize } : {}),
|
||||
...(requestSize ? { size: requestSize } : {}),
|
||||
response_format: "b64_json",
|
||||
},
|
||||
{
|
||||
@@ -173,7 +180,7 @@ export async function requestGeneration(config: AiConfig, prompt: string) {
|
||||
export async function requestEdit(config: AiConfig, prompt: string, references: ReferenceImage[]) {
|
||||
const n = Math.max(1, Math.min(15, Math.floor(Math.abs(Number(config.count)) || 1)));
|
||||
const quality = normalizeQuality(config.quality);
|
||||
const pixelSize = quality ? resolveSize(quality, config.size) : undefined;
|
||||
const requestSize = resolveRequestSize(quality, config.size);
|
||||
const formData = new FormData();
|
||||
formData.set("model", config.model);
|
||||
formData.set("prompt", withSystemPrompt(config, prompt));
|
||||
@@ -182,8 +189,8 @@ export async function requestEdit(config: AiConfig, prompt: string, references:
|
||||
if (quality) {
|
||||
formData.set("quality", quality);
|
||||
}
|
||||
if (pixelSize) {
|
||||
formData.set("size", pixelSize);
|
||||
if (requestSize) {
|
||||
formData.set("size", requestSize);
|
||||
}
|
||||
const files = await Promise.all(references.map(async (image) => dataUrlToFile({ ...image, dataUrl: await imageToDataUrl(image) })));
|
||||
files.forEach((file) => formData.append("image", file));
|
||||
|
||||
Reference in New Issue
Block a user