fix: align psd template layer ordering

This commit is contained in:
Your Name 2026-06-04 12:04:14 +08:00
parent 800eb10ba4
commit b12d61b371
2 changed files with 17 additions and 10 deletions

View File

@ -1644,8 +1644,8 @@ function getAssignedImageMaskStyle(
? layers.find((item) => item.id === layer.clipMaskLayerId)
: null;
const fallbackMaskUrl =
layer.forceClipMask && clipMaskLayer
? getPsdLayerPreviewSourceUrl(clipMaskLayer)
layer.forceClipMask
? getPsdLayerPreviewSourceUrl(clipMaskLayer || layer)
: "";
const normalizedMaskUrl = String(
layer.maskUrl || fallbackMaskUrl || ""
@ -2247,8 +2247,8 @@ export function AgentPsdTemplateEditorDialog({
);
const orderedUserManageablePreviewLayers = useMemo(
() =>
orderedPreviewLayers.filter((layer) => !isAgentPsdLayerSuperLocked(layer)),
[orderedPreviewLayers]
orderedTemplateLayers.filter((layer) => !isAgentPsdLayerSuperLocked(layer)),
[orderedTemplateLayers]
);
const orderedEditableImageLayers = useMemo(
() =>
@ -3417,13 +3417,13 @@ export function AgentPsdTemplateEditorDialog({
}
if (direction === "front") {
nextOrder.push(removed);
} else if (direction === "back") {
nextOrder.unshift(removed);
} else if (direction === "back") {
nextOrder.push(removed);
} else if (direction === "forward") {
nextOrder.splice(Math.min(baseOrder.length - 1, currentIndex + 1), 0, removed);
} else {
nextOrder.splice(Math.max(0, currentIndex - 1), 0, removed);
} else {
nextOrder.splice(Math.min(baseOrder.length - 1, currentIndex + 1), 0, removed);
}
return nextOrder;

View File

@ -602,6 +602,12 @@ export async function renderAgentPsdTemplate(params: {
"PSD 剪切蒙版目标资源",
true
);
} else if (layer.forceClipMask) {
pushAsset(
getStoredLayerSourceUrl(layer),
"PSD 自身剪切蒙版资源",
true
);
}
} else {
pushAsset(
@ -938,6 +944,7 @@ export async function renderAgentPsdTemplate(params: {
return;
}
const renderFrameLayer = clipMaskLayer || layer;
const maskSourceLayer = clipMaskLayer || (layer.forceClipMask ? layer : null);
const renderFrameContentBounds =
clipMaskLayer && isAgentPsdImageLayerSlot(clipMaskLayer)
? clipMaskLayer.contentBounds
@ -990,7 +997,7 @@ export async function renderAgentPsdTemplate(params: {
}
const layerPositionOffset = getLayerPositionOffset(renderFrameLayer.id);
const shouldApplyMask = Boolean(layer.maskUrl || clipMaskLayer);
const shouldApplyMask = Boolean(layer.maskUrl || maskSourceLayer);
if (!shouldApplyMask) {
if (isDefaultSourceImageLayer) {
await appendRenderBaseOverlay();
@ -1025,7 +1032,7 @@ export async function renderAgentPsdTemplate(params: {
try {
const rawMaskBuffer = layer.maskUrl
? await readCachedBuffer(layer.maskUrl, "PSD 蒙版资源")
: await readReusableLayerBuffer(clipMaskLayer!);
: await readReusableLayerBuffer(maskSourceLayer!);
if (!rawMaskBuffer) {
throw new Error("Missing PSD layer mask source");
}