如何选择活动图层?

3

看起来要调整图层的大小,必须从UI角度上选择并使其处于活动状态。否则,在API调用任何函数时会出现错误,指示该函数不受支持。

因此,在调整大小之前,我执行以下操作:

var a = doc.artLayers.getByName("iPad");
app.activeDocument.activeLayer = a;

这样不会在视觉上改变所选图层,因此在调用调整大小函数后会失败。唯一的方法是手动点击图层(任何一个图层),然后它才能正常工作。 有没有一种不需要用户交互的正确方法来调整图层大小呢?

2个回答

9
您只需要修改您的代码即可:
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

我该如何在图层中切换位图和蒙版作为活动对象? - Royi
@Drazick 我添加了两个函数,可以帮助你在位图层和图层蒙版之间进行切换。 - Ghoul Fool

3

您可以从extendscript的“数据浏览器”视图中找到它:

var doc = app.activeDocument;

// set active layer
doc.activeLayer = doc.layers.getByName("Layer Name Here");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接