我一直在使用我在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 在函数尝试运行分组函数之前,有没有办法确定没有选择任何图层?
非常感谢任何帮助!
答案 0 :(得分:0)
我在xtools中使用Stdlib中的函数:http://ps-scripts.sourceforge.net/xtools.html。在运行上面的代码之前,只需检查从Stdlib.getSelectedLayers()返回的数组的长度 - 或者检查库中的代码以根据自己的需要对其进行修改。
再次阅读你的问题,我想知道上面的代码是不是来自同一个库的getSelectedLayers函数?如果是这样,您是否尝试在运行之前检查activeDocument?我想如果你选择了任何一层,至少其中一层应该是活跃的?