You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Photoshop JSX创建SmartObject时如何保持原始像素尺寸不缩放

Photoshop JSX 画板图层转智能对象无损尺寸解决方案

问题原因

直接调用默认newPlacedLayer动作创建智能对象时,Photoshop会自动对画板内选中图层的坐标做文档级换算,嵌套智能对象的已有变换属性会被二次计算,最终导致生成的智能对象像素被压缩。你之前尝试的resize方法仅能修改图层的外层变换参数,无法干预转智能对象过程中的内部像素换算逻辑,因此无效。

可用解决方案

方案1:调整智能对象创建参数(轻量)

构造带尺寸参数的动作描述符,指定创建时宽高比例为100%,禁用自动缩放适配:

var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass(stringIDToTypeID("placedLayer"));
desc.putReference(charIDToTypeID("null"), ref);
// 强制指定宽高缩放比例为100%
desc.putUnitDouble(charIDToTypeID("Wdth"), charIDToTypeID("Prc "), 100);
desc.putUnitDouble(charIDToTypeID("Hght"), charIDToTypeID("Prc "), 100);
// 锚点设为中心对齐
desc.putEnumerated(charIDToTypeID("Anch"), charIDToTypeID("Anch"), charIDToTypeID("MdcC"));
executeAction(charIDToTypeID("Mk  "), desc, DialogModes.NO);

方案2:临时文档中转(100%保证尺寸)

如果方案1仍存在偏差,通过和画板等尺寸的临时文档中转,完全规避坐标换算问题:

var srcDoc = app.activeDocument;
// 提前选中目标画板的所有需要合并的图层
var selectLayers = srcDoc.activeLayers;
var targetArtboard = selectLayers[0].parent;
var abBounds = targetArtboard.bounds;
var abW = abBounds[2] - abBounds[0];
var abH = abBounds[3] - abBounds[1];

// 复制选中图层
app.executeAction(charIDToTypeID("Cpy "), undefined, DialogModes.NO);
// 创建和画板尺寸、分辨率完全一致的临时文档
var tempDoc = app.documents.add(abW, abH, srcDoc.resolution, "temp", NewDocumentMode.RGB, DocumentFill.TRANSPARENT);
app.executeAction(charIDToTypeID("Pste"), undefined, DialogModes.NO);

// 临时文档内全选图层转智能对象
tempDoc.selection.selectAllLayers();
executeAction(stringIDToTypeID("newPlacedLayer"), undefined, DialogModes.NO);
// 复制生成的智能对象
tempDoc.activeLayer.copy();
tempDoc.close(SaveOptions.DONOTSAVECHANGES);

// 粘贴回原文档并对齐到原画板位置
var newSO = srcDoc.paste();
newSO.translate(abBounds[0] - newSO.bounds[0], abBounds[1] - newSO.bounds[1]);

内容的提问来源于stack exchange,提问作者Dave Benjoya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 12:30:01