feat: 阿里生图自动模式使用输入图片的原始比例
- auto 模式不传递 size 参数,让 API 根据输入图片自动决定比例 - 根据阿里云文档:默认时宽高比与输入图(多图时为最后一张)一致 - 只有用户明确选择具体比例(如 4:3、16:9)时才传递 size 参数 - 避免图片被压扁变形
This commit is contained in:
parent
f46ee10eba
commit
59eff93109
@ -382,10 +382,15 @@ export function createAlibabaImage({ apiKey, baseURL }: AlibabaImageConfig) {
|
||||
|
||||
// 根据宽高比计算实际分辨率
|
||||
// 阿里云 API 要求宽高在 512-2048 之间
|
||||
const calculateSize = (ratio: string, base: number): string => {
|
||||
const calculateSize = (ratio: string, base: number): string | null => {
|
||||
// 如果是 auto 模式,返回 null,让 API 根据输入图片自动决定
|
||||
// 根据阿里云文档:默认(不指定时):总像素接近 1024*1024,宽高比与输入图(多图输入时为最后一张)一致
|
||||
if (ratio === "auto") {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 解析宽高比
|
||||
const ratioMap: Record<string, [number, number]> = {
|
||||
"auto": [1, 1],
|
||||
"1:1": [1, 1],
|
||||
"16:9": [16, 9],
|
||||
"9:16": [9, 16],
|
||||
@ -446,16 +451,25 @@ export function createAlibabaImage({ apiKey, baseURL }: AlibabaImageConfig) {
|
||||
return `${width}*${height}`;
|
||||
};
|
||||
|
||||
// 如果用户直接指定了 size,使用用户指定的
|
||||
// 处理 size 参数
|
||||
// 1. 如果用户直接指定了 size,使用用户指定的
|
||||
// 2. 如果是 auto 模式,不传 size,让 API 根据输入图片自动决定比例
|
||||
// 3. 如果指定了具体比例,根据 aspectRatio 和 imageSize 计算
|
||||
if (options.imageParams?.size) {
|
||||
params.size = options.imageParams.size;
|
||||
console.log(`[Alibaba Image] Using user-specified size: ${params.size}`);
|
||||
} else {
|
||||
// 否则根据 aspectRatio 和 imageSize 计算
|
||||
params.size = calculateSize(aspectRatio, baseSize);
|
||||
const calculatedSize = calculateSize(aspectRatio, baseSize);
|
||||
if (calculatedSize) {
|
||||
params.size = calculatedSize;
|
||||
console.log(`[Alibaba Image] Calculated size: aspectRatio=${aspectRatio}, imageSize=${imageSize} => size=${params.size}`);
|
||||
} else {
|
||||
// auto 模式:不设置 size,让 API 根据输入图片自动决定
|
||||
// 阿里云会保持输入图片的宽高比,总像素接近 1024*1024
|
||||
console.log(`[Alibaba Image] Auto mode: not setting size, API will use input image's aspect ratio`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[Alibaba Image] Calculated size: aspectRatio=${aspectRatio}, imageSize=${imageSize} => size=${params.size}`);
|
||||
|
||||
// 根据图片数量确定编辑模式
|
||||
const editMode = imageUrls.length === 1 ? "单图编辑" : `多图融合 (${imageUrls.length}张)`;
|
||||
console.log("[Alibaba Image] 编辑模式:", editMode);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user