diff --git a/app/api/canvas/local-edit/route.ts b/app/api/canvas/local-edit/route.ts index 497b972e1..f465bf017 100644 --- a/app/api/canvas/local-edit/route.ts +++ b/app/api/canvas/local-edit/route.ts @@ -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), diff --git a/lib/canvas/generate-image.ts b/lib/canvas/generate-image.ts index 446eba90c..c4cb34638 100644 --- a/lib/canvas/generate-image.ts +++ b/lib/canvas/generate-image.ts @@ -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,