使用 javascript 获取选定图层或图层组数组 (Photoshop CS4)

Dan*_*nho 3 javascript photoshop cs4

K 基本上我需要编写一个 Photoshop 脚本来迭代选定的图层并检索有关它们的一些信息。

如果我可以获得所选图层的数组,我会没事的,我知道如何做其余的事情,但是获取该数组本身就是一件令人头痛的事情。

我知道该文档包含类似“activeLayers”的内容,但我迷失了如何处理级别和子级别层。

所有图层都在一个组中,所以如果它更容易,如果我可以将每个图层都放在一个组中,那就太好了:D

感谢您对此的任何提示。

小智 5

Bravo 的代码可以工作,但在未选择任何图层时会失败并出现错误,因此我对其进行了调整以消除错误并仅返回一个空数组:

function getSelectedLayers(){
  var resultLayers=new Array();
  try{
    var idGrp = stringIDToTypeID( "groupLayersEvent" );
    var descGrp = new ActionDescriptor();
    var refGrp = new ActionReference();
    refGrp.putEnumerated(charIDToTypeID( "Lyr " ),charIDToTypeID( "Ordn" ),charIDToTypeID( "Trgt" ));
    descGrp.putReference(charIDToTypeID( "null" ), refGrp );
    executeAction( idGrp, descGrp, DialogModes.NO );
    for (var ix=0;ix<app.activeDocument.activeLayer.layers.length;ix++){resultLayers.push(app.activeDocument.activeLayer.layers[ix])}
    var id8 = charIDToTypeID( "slct" );
    var desc5 = new ActionDescriptor();
    var id9 = charIDToTypeID( "null" );
    var ref2 = new ActionReference();
    var id10 = charIDToTypeID( "HstS" );
    var id11 = charIDToTypeID( "Ordn" );
    var id12 = charIDToTypeID( "Prvs" );
    ref2.putEnumerated( id10, id11, id12 );
    desc5.putReference( id9, ref2 );
    executeAction( id8, desc5, DialogModes.NO );
  } catch (err) { }
  return resultLayers;
}   
$.writeln(getSelectedLayers());
Run Code Online (Sandbox Code Playgroud)

简单地将代码包装在 try/catch 块中是行不通的,所以我也更改了:

executeAction( idGrp, descGrp, DialogModes.ALL );
Run Code Online (Sandbox Code Playgroud)

executeAction( idGrp, descGrp, DialogModes.NO );
Run Code Online (Sandbox Code Playgroud)

这使得运行时错误消失了。