看来,为了调整图层的大小,必须从API的角度选择(从UI角度来看)并激活它。否则,我在任何不支持此功能的函数调用时都会收到错误。
所以在调整大小之前我做了
var a = doc.artLayers.getByName("iPad");
app.activeDocument.activeLayer = a;
这在视觉上不会改变所选层,因此调用resize函数失败。要让它工作的唯一方法,手动点击图层(任何图层),然后它就可以了。 在没有用户交互的情况下调整图层大小的正确方法是什么?
答案 0 :(得分:5)
您只需修改代码:
var doc = app.activeDocument;
doc.activeLayer = doc.artLayers.getByName("iPad");
这会将活动图层设置为名为“ipad”的图层。这是选择图层(按名称)然后进一步处理图像的标准方法,在您调整大小的情况下。显然,我不知道PSD中的其他内容在层数方面可以选择或忽略。另一种方法是迭代所有层并处理它们。
这里有两个有用的功能:一个将选择图层蒙版是否有一个,另一个将取消选择图层蒙版并返回到位图图层
// FUNCTION DESELECT LAYER MASK AND SELECT IMAGE LAYER
// --------------------------------------------------------
function deselectLayerMaskAndSelectImageLayer()
{
// =======================================================
var id248 = charIDToTypeID( "slct" );
var desc48 = new ActionDescriptor();
var id249 = charIDToTypeID( "null" );
var ref36 = new ActionReference();
var id250 = charIDToTypeID( "Chnl" );
var id251 = charIDToTypeID( "Chnl" );
var id252 = charIDToTypeID( "RGB " );
ref36.putEnumerated( id250, id251, id252 );
desc48.putReference( id249, ref36 );
var id253 = charIDToTypeID( "MkVs" );
desc48.putBoolean( id253, false );
executeAction( id248, desc48, DialogModes.NO );
}
// FUNCTION SELECT MASK
// --------------------------------------------------------
function selectMask(LayerName)
{
try
{
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Chnl'), charIDToTypeID('Msk ') );
ref.putName( charIDToTypeID('Lyr '), LayerName );
desc.putReference( charIDToTypeID('null'), ref );
desc.putBoolean( charIDToTypeID('MkVs'), true );
executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );
// =======================================================
var id1083 = charIDToTypeID( "setd" );
var desc238 = new ActionDescriptor();
var id1084 = charIDToTypeID( "null" );
var ref161 = new ActionReference();
var id1085 = charIDToTypeID( "Chnl" );
var id1086 = charIDToTypeID( "fsel" );
ref161.putProperty( id1085, id1086 );
desc238.putReference( id1084, ref161 );
var id1087 = charIDToTypeID( "T " );
var ref162 = new ActionReference();
var id1088 = charIDToTypeID( "Chnl" );
var id1089 = charIDToTypeID( "Ordn" );
var id1090 = charIDToTypeID( "Trgt" );
ref162.putEnumerated( id1088, id1089, id1090 );
desc238.putReference( id1087, ref162 );
executeAction( id1083, desc238, DialogModes.NO );
}
catch(e)
{
//alert(e)
//alert( "This layer has NO layer mask!" );
activeDocument.selection.deselect();
}
} //end function
答案 1 :(得分:0)
您可以在extendscript中的数据浏览器视图中找到它:
var doc = app.activeDocument;
// set active layer
doc.activeLayer = doc.layers.getByName("Layer Name Here");