diff --git a/components/agents/AgentPsdTemplateEditorDialog.tsx b/components/agents/AgentPsdTemplateEditorDialog.tsx index 5d31778bb..76c171d42 100644 --- a/components/agents/AgentPsdTemplateEditorDialog.tsx +++ b/components/agents/AgentPsdTemplateEditorDialog.tsx @@ -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; diff --git a/lib/agents/psd-template-renderer.ts b/lib/agents/psd-template-renderer.ts index 09456cfbd..ab7e3dc85 100644 --- a/lib/agents/psd-template-renderer.ts +++ b/lib/agents/psd-template-renderer.ts @@ -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"); }