fix: 刷新节点后恢复图像和选区数据
- onNodeCreated: 如果 image widget 已有值,加载图像 - loadImageAndDetectMask: 检查 region_coords widget 恢复之前的选区
This commit is contained in:
+25
-1
@@ -773,7 +773,26 @@ async function loadImageAndDetectMask(node, imageName) {
|
||||
|
||||
if (hasMask && minX <= maxX && minY <= maxY) {
|
||||
data.maskBounds = { x: minX, y: minY, width: maxX - minX + 1, height: maxY - minY + 1 };
|
||||
// 使用统一的约束函数计算选区
|
||||
|
||||
// 检查是否有之前保存的选区坐标
|
||||
const coordsWidget = node.widgets?.find(w => w.name === "region_coords");
|
||||
if (coordsWidget?.value) {
|
||||
try {
|
||||
const savedRegion = JSON.parse(coordsWidget.value);
|
||||
if (savedRegion.x !== undefined && savedRegion.y !== undefined &&
|
||||
savedRegion.width !== undefined && savedRegion.height !== undefined) {
|
||||
data.regionX = savedRegion.x;
|
||||
data.regionY = savedRegion.y;
|
||||
data.regionWidth = savedRegion.width;
|
||||
data.regionHeight = savedRegion.height;
|
||||
nodeImageData.set(node.id, data);
|
||||
node.setDirtyCanvas(true);
|
||||
return;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
// 没有保存的选区,重新计算
|
||||
constrainRegion(data, padding);
|
||||
}
|
||||
|
||||
@@ -1334,6 +1353,11 @@ app.registerExtension({
|
||||
if (origCb) origCb.apply(this, arguments);
|
||||
loadImageAndDetectMask(node, v);
|
||||
};
|
||||
|
||||
// 刷新节点时:widget 已有值,需要加载图像
|
||||
if (imgW.value) {
|
||||
setTimeout(() => loadImageAndDetectMask(node, imgW.value), 0);
|
||||
}
|
||||
}
|
||||
|
||||
// 监听 padding 变化
|
||||
|
||||
Reference in New Issue
Block a user