使用PS CC JS获取活动图层,未选中任何图层时失败

时间:2015-02-21 01:06:31

标签: javascript photoshop photoshop-script photoshop-cs4

我一直在使用我在stackoverflow here上找到的函数,该函数可以通过对图层进行分组,将图层名称转储到数组然后取消组合来实现。

function getSelectedLayers(){
    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.ALL );
    var resultLayers=new Array();
    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 );
    return resultLayers;
}   
var layers = getSelectedLayers();

不幸的是,当没有选择任何图层并且运行此功能时,Photoshop会抛出消息

  

“组图层”命令目前无法使用。

当没有脚本停止时,有没有办法至少返回一个空值?这样我就可以显示一条消息,说明当图层为空时需要选择图层。

OR 在函数尝试运行分组函数之前,有没有办法确定没有选择任何图层?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我在xtools中使用Stdlib中的函数:http://ps-scripts.sourceforge.net/xtools.html。在运行上面的代码之前,只需检查从Stdlib.getSelectedLayers()返回的数组的长度 - 或者检查库中的代码以根据自己的需要对其进行修改。

再次阅读你的问题,我想知道上面的代码是不是来自同一个库的getSelectedLayers函数?如果是这样,您是否尝试在运行之前检查activeDocument?我想如果你选择了任何一层,至少其中一层应该是活跃的?