ScriptListener 代码在活动层之上创建新层

ScriptListener code creates new layer above active layer

我已经使用 scriptlistener 创建了一个新层。它做的聪明的事情是将它放在活动层之上(创建后没有将它从顶部移动)但是,我不知道它是代码的哪一部分,因为它们都符合 executeAction:

function create_new_layer(layername)
{
    var idMk = charIDToTypeID( "Mk  " );
    var desc447 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
    var ref217 = new ActionReference();
    var idLyr = charIDToTypeID( "Lyr " );
    ref217.putClass( idLyr );
    desc447.putReference( idnull, ref217 );
    var idUsng = charIDToTypeID( "Usng" );
    var desc448 = new ActionDescriptor();
    var idNm = charIDToTypeID( "Nm  " );
    desc448.putString( idNm, layername );
    var idLyr = charIDToTypeID( "Lyr " );
    desc447.putObject( idUsng, idLyr, desc448 );
    var idLyrI = charIDToTypeID( "LyrI" );
    desc447.putInteger( idLyrI, 57 );
    executeAction( idMk, desc447, DialogModes.NO );
}

我认为 AM 代码代表了 Photoshop 中的实际功能,它们在内部是如何工作的,DOM 是在其之上的某种覆盖。通常 DOM 代码是有限的,不能做很多 AM 可以做的事情。在这种情况下,ArtLayer.add() 将层推送到 activeDocument.layers,因此它出现在层堆栈的顶部,而 AM 命令执行 New Layer... 命令。通常 AM 代码的工作速度也比 DOM 快得多(高达 10-15 倍),尤其是在选择图层和使用图层等方面。