fix: protect scale adjust output regions

This commit is contained in:
134 2026-06-21 18:24:56 +08:00
parent e6d3b20308
commit 317593a72d
2 changed files with 37 additions and 7 deletions

View File

@ -323,6 +323,16 @@ function scaleRectAroundCenter(
};
}
function buildScaleAdjustCompositeRegions(
regions: NormalizedLocalEditRegion[],
scalePercent: ScaleAdjustPercent
) {
return regions.flatMap((region) => [
region.rect,
scaleRectAroundCenter(region.rect, scalePercent),
]);
}
function expandPixelRectForCrop(params: {
height: number;
pixelRect: NormalizedLocalEditRegion["pixelRect"];
@ -930,7 +940,13 @@ export async function POST(request: NextRequest) {
}
: undefined,
localEditComposite: isScaleAdjustOperation
? undefined
? {
sourceImageUrl,
regions: buildScaleAdjustCompositeRegions(
regions,
scalePercent as ScaleAdjustPercent
),
}
: {
sourceImageUrl,
regions: regions.map((region) => region.rect),

View File

@ -1478,17 +1478,31 @@ export async function generateCanvasImage(
throw new Error("图片生成失败");
}
const baseImages = collectedImages.slice(0, targetImageCount);
const shouldCompositeBeforeScaleAdjustVerification = Boolean(
scaleAdjustVerification && localEditComposite
);
const protectedImages = shouldCompositeBeforeScaleAdjustVerification
? await applyLocalEditCompositeToImages({
composite: localEditComposite,
debugLabel,
images: baseImages,
})
: baseImages;
const scaleCheckedImages = await applyScaleAdjustVerificationToImages({
debugLabel,
images: collectedImages.slice(0, targetImageCount),
images: protectedImages,
verification: scaleAdjustVerification,
});
const finalImages = await applyLocalEditCompositeToImages({
composite: localEditComposite,
debugLabel,
images: scaleCheckedImages,
});
const finalImages = shouldCompositeBeforeScaleAdjustVerification
? scaleCheckedImages
: await applyLocalEditCompositeToImages({
composite: localEditComposite,
debugLabel,
images: scaleCheckedImages,
});
console.info("[Canvas Generate Image] Completed:", {
debugLabel,
elapsedMs: Date.now() - startedAt,