fix: clip PSD super lock replacements
This commit is contained in:
parent
e2cf152662
commit
d82a47c035
@ -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 (
|
||||
<div
|
||||
@ -4261,7 +4280,7 @@ export function AgentPsdTemplateEditorDialog({
|
||||
}}
|
||||
style={{
|
||||
...assignedImageContainerStyle,
|
||||
zIndex: baseZIndex,
|
||||
zIndex: previewZIndex,
|
||||
cursor: canDragAssignedImage
|
||||
? imagePlacementDragStateRef.current
|
||||
?.layerId === layer.id
|
||||
@ -4523,6 +4542,9 @@ export function AgentPsdTemplateEditorDialog({
|
||||
effectiveImageAssignments[layer.id] || ""
|
||||
).trim()
|
||||
);
|
||||
const effectiveBaseZIndex = hasAssignedImage
|
||||
? Math.max(baseZIndex, renderBaseZIndex + 1)
|
||||
: baseZIndex;
|
||||
const isLayerSuperLocked =
|
||||
isAgentPsdLayerSuperLocked(layer);
|
||||
|
||||
@ -4534,7 +4556,7 @@ export function AgentPsdTemplateEditorDialog({
|
||||
style={{
|
||||
...frameStyle,
|
||||
zIndex:
|
||||
baseZIndex +
|
||||
effectiveBaseZIndex +
|
||||
SELECTED_LAYER_INTERACTION_Z_BOOST,
|
||||
background: "rgba(249,115,22,0.08)",
|
||||
cursor:
|
||||
@ -4567,7 +4589,7 @@ export function AgentPsdTemplateEditorDialog({
|
||||
style={{
|
||||
...frameStyle,
|
||||
zIndex:
|
||||
baseZIndex +
|
||||
effectiveBaseZIndex +
|
||||
(isSelected
|
||||
? SELECTED_LAYER_INTERACTION_Z_BOOST
|
||||
: 0),
|
||||
@ -4604,6 +4626,9 @@ export function AgentPsdTemplateEditorDialog({
|
||||
);
|
||||
const baseZIndex =
|
||||
layerStackZIndexById.get(layer.id) || 1;
|
||||
const effectiveBaseZIndex = hasAssignedImage
|
||||
? Math.max(baseZIndex, renderBaseZIndex + 1)
|
||||
: baseZIndex;
|
||||
if (!isSelected || !hasAssignedImage) {
|
||||
return null;
|
||||
}
|
||||
@ -4631,7 +4656,7 @@ export function AgentPsdTemplateEditorDialog({
|
||||
44
|
||||
),
|
||||
zIndex:
|
||||
baseZIndex +
|
||||
effectiveBaseZIndex +
|
||||
SELECTED_LAYER_CONTROLS_Z_BOOST,
|
||||
}}
|
||||
>
|
||||
|
||||
@ -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)),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user