fix: avoid empty PSD replacement masks
This commit is contained in:
parent
cffed9ab50
commit
c247093ec9
@ -383,12 +383,21 @@ function buildPsdLayerPreviewUrl(
|
||||
params?: {
|
||||
width?: number;
|
||||
quality?: number;
|
||||
delivery?: "proxy";
|
||||
}
|
||||
) {
|
||||
return buildTemplatePreviewThumbUrl(imageUrl, {
|
||||
width: Math.max(96, Math.min(1280, Math.round(params?.width || 720))),
|
||||
quality: Math.max(52, Math.min(82, Math.round(params?.quality || 68))),
|
||||
});
|
||||
const width = Math.max(96, Math.min(1280, Math.round(params?.width || 720)));
|
||||
const quality = Math.max(52, Math.min(82, Math.round(params?.quality || 68)));
|
||||
if (params?.delivery === "proxy") {
|
||||
return buildImageProxyUrl(imageUrl, {
|
||||
width,
|
||||
quality,
|
||||
format: "webp",
|
||||
delivery: "proxy",
|
||||
});
|
||||
}
|
||||
|
||||
return buildTemplatePreviewThumbUrl(imageUrl, { width, quality });
|
||||
}
|
||||
|
||||
function buildPsdLayerMaskUrl(maskUrl: string, layerWidth: number) {
|
||||
@ -1494,9 +1503,10 @@ function getAssignedImageMaskStyle(
|
||||
const clipMaskLayer = layer.clipMaskLayerId
|
||||
? layers.find((item) => item.id === layer.clipMaskLayerId)
|
||||
: null;
|
||||
const fallbackMaskUrl = layer.forceClipMask
|
||||
? getPsdLayerPreviewSourceUrl(clipMaskLayer || layer)
|
||||
: "";
|
||||
const fallbackMaskUrl =
|
||||
layer.forceClipMask && clipMaskLayer
|
||||
? getPsdLayerPreviewSourceUrl(clipMaskLayer)
|
||||
: "";
|
||||
const normalizedMaskUrl = String(
|
||||
layer.maskUrl || fallbackMaskUrl || ""
|
||||
).trim();
|
||||
@ -4247,6 +4257,7 @@ export function AgentPsdTemplateEditorDialog({
|
||||
? Math.max(layer.width, layer.height)
|
||||
: layer.width,
|
||||
quality: assignedUrl ? 74 : 68,
|
||||
delivery: assignedUrl ? "proxy" : undefined,
|
||||
})}
|
||||
style={
|
||||
assignedUrl && imageSizes[layer.id]
|
||||
|
||||
@ -1001,7 +1001,12 @@ export async function renderAgentPsdTemplate(params: {
|
||||
}
|
||||
|
||||
const layerPositionOffset = getLayerPositionOffset(layer.id);
|
||||
if (!layer.maskUrl && !layer.forceClipMask) {
|
||||
const clipMaskLayer =
|
||||
layer.forceClipMask && layer.clipMaskLayerId
|
||||
? layerMap.get(layer.clipMaskLayerId)
|
||||
: null;
|
||||
const shouldApplyMask = Boolean(layer.maskUrl || clipMaskLayer);
|
||||
if (!shouldApplyMask) {
|
||||
if (isDefaultSourceImageLayer) {
|
||||
await appendRenderBaseOverlay();
|
||||
}
|
||||
@ -1039,15 +1044,11 @@ export async function renderAgentPsdTemplate(params: {
|
||||
.png(PSD_RENDER_PNG_OPTIONS)
|
||||
.toBuffer();
|
||||
|
||||
const shouldUseLayerSourceAsMask = !layer.maskUrl && layer.forceClipMask;
|
||||
if (layer.maskUrl || shouldUseLayerSourceAsMask) {
|
||||
if (shouldApplyMask) {
|
||||
try {
|
||||
const clipMaskLayer = layer.clipMaskLayerId
|
||||
? layerMap.get(layer.clipMaskLayerId)
|
||||
: null;
|
||||
const rawMaskBuffer = layer.maskUrl
|
||||
? await readCachedBuffer(layer.maskUrl, "PSD 蒙版资源")
|
||||
: await readReusableLayerBuffer(clipMaskLayer || layer);
|
||||
: await readReusableLayerBuffer(clipMaskLayer!);
|
||||
if (!rawMaskBuffer) {
|
||||
throw new Error("Missing PSD layer mask source");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user