fix: accept visible scale shrink footprints

This commit is contained in:
134 2026-07-02 23:04:43 +08:00
parent c4e4981a24
commit 2ca0c54de2

View File

@ -185,6 +185,8 @@ const SCALE_ADJUST_FALLBACK_MASK_DISTANCE_THRESHOLD = 42;
const SCALE_ADJUST_FALLBACK_MASK_LUMA_GAP = 18;
const SCALE_ADJUST_FALLBACK_INPAINT_ITERATIONS = 180;
const SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_MAX_RATIO = 0.72;
const SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_RELAXED_MAX_RATIO = 0.84;
const SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_MIN_REMOVED_RATIO = 0.14;
const SCALE_ADJUST_SHRINK_MIN_SOURCE_OUTSIDE_PIXELS = 60;
const SCALE_ADJUST_SHRINK_TARGET_FOOTPRINT_MARGIN = 0.018;
@ -894,7 +896,10 @@ async function getScaleAdjustFootprintChangeStats(params: {
generatedOutsidePixels: number;
outsideRatio: number;
passed: boolean;
passReason: "low-source-mask" | "strict-ratio" | "removed-old-footprint" | "failed";
regionIndex: number;
removedOutsidePixels: number;
removedOutsideRatio: number;
sourceOutsidePixels: number;
}> = [];
@ -952,14 +957,37 @@ async function getScaleAdjustFootprintChangeStats(params: {
}
const outsideRatio =
sourceOutsidePixels > 0 ? generatedOutsidePixels / sourceOutsidePixels : 0;
const passed =
sourceOutsidePixels < SCALE_ADJUST_SHRINK_MIN_SOURCE_OUTSIDE_PIXELS ||
const removedOutsidePixels = sourceOutsidePixels - generatedOutsidePixels;
const removedOutsideRatio =
sourceOutsidePixels > 0 ? removedOutsidePixels / sourceOutsidePixels : 0;
const minRemovedOutsidePixels = Math.max(
SCALE_ADJUST_SHRINK_MIN_SOURCE_OUTSIDE_PIXELS,
Math.round(
sourceOutsidePixels * SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_MIN_REMOVED_RATIO
)
);
const lowSourceMask =
sourceOutsidePixels < SCALE_ADJUST_SHRINK_MIN_SOURCE_OUTSIDE_PIXELS;
const strictRatio =
outsideRatio <= SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_MAX_RATIO;
const removedOldFootprint =
outsideRatio <= SCALE_ADJUST_SHRINK_OUTSIDE_FOOTPRINT_RELAXED_MAX_RATIO &&
removedOutsidePixels >= minRemovedOutsidePixels;
const passed = lowSourceMask || strictRatio || removedOldFootprint;
shrinkStats.push({
generatedOutsidePixels,
outsideRatio,
passed,
passReason: lowSourceMask
? "low-source-mask"
: strictRatio
? "strict-ratio"
: removedOldFootprint
? "removed-old-footprint"
: "failed",
regionIndex: index,
removedOutsidePixels,
removedOutsideRatio,
sourceOutsidePixels,
});
}
@ -1270,7 +1298,10 @@ async function applyScaleAdjustVerificationToImages(params: {
generatedOutsidePixels: item.generatedOutsidePixels,
outsideRatio: Number(item.outsideRatio.toFixed(3)),
passed: item.passed,
passReason: item.passReason,
regionIndex: item.regionIndex,
removedOutsidePixels: item.removedOutsidePixels,
removedOutsideRatio: Number(item.removedOutsideRatio.toFixed(3)),
sourceOutsidePixels: item.sourceOutsidePixels,
})),
},
@ -1312,7 +1343,10 @@ async function applyScaleAdjustVerificationToImages(params: {
generatedOutsidePixels: item.generatedOutsidePixels,
outsideRatio: Number(item.outsideRatio.toFixed(3)),
passed: item.passed,
passReason: item.passReason,
regionIndex: item.regionIndex,
removedOutsidePixels: item.removedOutsidePixels,
removedOutsideRatio: Number(item.removedOutsideRatio.toFixed(3)),
sourceOutsidePixels: item.sourceOutsidePixels,
})),
},