diff --git a/components/agents/AgentPsdTemplateEditorDialog.tsx b/components/agents/AgentPsdTemplateEditorDialog.tsx index c296a0755..17be76a3d 100644 --- a/components/agents/AgentPsdTemplateEditorDialog.tsx +++ b/components/agents/AgentPsdTemplateEditorDialog.tsx @@ -1471,19 +1471,30 @@ function renderTextLayerPreviewContent( ); } -function getAssignedImageMaskStyle( - layer: AgentPsdTemplateImageLayerSlot -): CSSProperties { - const hasMask = Boolean(layer.maskUrl); +function getAssignedImageMaskStyle(params: { + layer: AgentPsdTemplateImageLayerSlot; + maskSourceUrl?: string; +}): CSSProperties { + const normalizedMaskUrl = String( + params.layer.maskUrl || params.maskSourceUrl || "" + ).trim(); + const hasMask = Boolean(normalizedMaskUrl); + const maskImageUrl = hasMask + ? `url(${buildPsdLayerPreviewUrl(normalizedMaskUrl, { + width: params.layer.width, + quality: 72, + })})` + : undefined; return { - WebkitMaskImage: hasMask ? `url(${layer.maskUrl})` : undefined, - maskImage: hasMask ? `url(${layer.maskUrl})` : undefined, + WebkitMaskImage: maskImageUrl, + maskImage: maskImageUrl, WebkitMaskSize: hasMask ? "100% 100%" : undefined, maskSize: hasMask ? "100% 100%" : undefined, WebkitMaskRepeat: hasMask ? "no-repeat" : undefined, maskRepeat: hasMask ? "no-repeat" : undefined, WebkitMaskPosition: hasMask ? "center" : undefined, maskPosition: hasMask ? "center" : undefined, + maskMode: hasMask ? "alpha" : undefined, }; } @@ -4228,12 +4239,20 @@ export function AgentPsdTemplateEditorDialog({ if (!layerImageUrl) { return null; } + const layerPreviewSourceUrl = + getPsdLayerPreviewSourceUrl(layer); const assignedImageContainerStyle = assignedUrl ? { ...layerBoxStyle, - ...getAssignedImageMaskStyle(layer), + ...getAssignedImageMaskStyle({ + layer, + maskSourceUrl: layerPreviewSourceUrl, + }), } : layerBoxStyle; + const previewZIndex = hasAssignedImage + ? Math.max(baseZIndex, renderBaseZIndex + 1) + : baseZIndex; return (
diff --git a/lib/agents/psd-template-renderer.ts b/lib/agents/psd-template-renderer.ts index d9a45880c..02e01bdc0 100644 --- a/lib/agents/psd-template-renderer.ts +++ b/lib/agents/psd-template-renderer.ts @@ -1035,11 +1035,17 @@ export async function renderAgentPsdTemplate(params: { .png(PSD_RENDER_PNG_OPTIONS) .toBuffer(); - if (layer.maskUrl) { + const shouldUseLayerSourceAsMask = + !layer.maskUrl && isAgentPsdLayerSuperLocked(layer); + if (layer.maskUrl || shouldUseLayerSourceAsMask) { try { - const maskBuffer = await sharp( - await readCachedBuffer(layer.maskUrl, "PSD 蒙版资源") - ) + const rawMaskBuffer = layer.maskUrl + ? await readCachedBuffer(layer.maskUrl, "PSD 蒙版资源") + : await readReusableLayerBuffer(layer); + if (!rawMaskBuffer) { + throw new Error("Missing PSD layer mask source"); + } + const maskBuffer = await sharp(rawMaskBuffer) .resize({ width: Math.max(1, Math.round(layer.width)), height: Math.max(1, Math.round(layer.height)),