未选择任何图层时结束 Photoshop 脚本

平面设计 adobe-photoshop Photoshop脚本 cc-2014 javascript
2022-02-07 00:50:38

我一直在使用我在 stackoverflow 上找到的一个函数据我所知,它可以通过将图层分组、将图层名称转储到数组中然后将它们取消分组来工作。

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 会抛出该消息

“图层组”命令当前不可用。

有没有办法在脚本停止的情况下至少返回一个空值?这样我就可以在它为空时显示一条关于需要选择图层的消息。

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

任何帮助是极大的赞赏!

2个回答

像这样的东西应该工作....

var activelayer = application.document.activeLayer;

if(activeLayer){
   var layers = getSelectedLayers();
}else{
   alert("Select a Layer");
}

我认为这会起作用,我对其进行了测试...通过检查 objType,您可以查看它是数组还是 LayerSet/Folder。我希望这能让你走上正轨。

function getSelectedLayers(){
        var objType = typeof app.activeDocument.activeLayer.layers;
        if(objType !== "undefined"){    
            var len = app.activeDocument.activeLayer.layers.length;
            if(len > 0){            
                    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<len;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;
            }
   }
    return null;
}