Photoshop脚本-当前层下的新层

Photoshop脚本-当前层下的新层,photoshop,photoshop-script,Photoshop,Photoshop Script,我是一名Photoshop初学者,目前正在使用Photoshop CS3版本。我一直使用键盘快捷键来加速设计过程,例如创建新图层等 然而,我觉得Photoshop必须具备的一个命令是在当前工作层下创建一个新层,因此我无法通过快捷方式指定它 我必须在当前层的上方创建一个新层,然后手动将其拖动到当前层的下方,我觉得可以使用动作或脚本实现自动化,这对我这个初学者来说都很困难 在这方面有人能帮我吗 谢谢 dkj可以使用以下脚本编写: 我简化了我的答案-你不需要找到索引,你可以使用活动层代替 create

我是一名Photoshop初学者,目前正在使用Photoshop CS3版本。我一直使用键盘快捷键来加速设计过程,例如创建新图层等

然而,我觉得Photoshop必须具备的一个命令是在当前工作层下创建一个新层,因此我无法通过快捷方式指定它

我必须在当前层的上方创建一个新层,然后手动将其拖动到当前层的下方,我觉得可以使用动作或脚本实现自动化,这对我这个初学者来说都很困难

在这方面有人能帮我吗

谢谢
dkj可以使用以下脚本编写:

我简化了我的答案-你不需要找到索引,你可以使用活动层代替

create_new_layer("Gwen!");

// function CREATE NEW LAYER (layername)
// --------------------------------------------------------
function create_new_layer(layername)
{
  if (layername == undefined) layername = "Layer";

   // create new layer at top of layers
   var originalLayer = app.activeDocument.activeLayer;
   var layerRef = app.activeDocument.artLayers.add();

   // name it & set blend mode to normal
   layerRef.name = layername;
   layerRef.blendMode = BlendMode.NORMAL;

   // Move the layer below
   layerRef.moveAfter(originalLayer);

   // Move the layer above if you desire
   // layerRef.moveBefore(originalLayer);
}

然后,您可以将此脚本记录为一个动作,并设置键盘快捷键。

几年前,我认为使用DOM的原生PS API很酷,应该工作得更快,但实际上,它的调用堆栈通常比通过动作执行的相同命令还要大。+此外,有时DOM函数由多个底层调用组成,例如
artLayers.add()
,它实际上是makelayer+将其移动到文档顶部。下面是我的PS脚本库中该功能的操作版本:

// get current layer number
function curLyrN(){
    if(app.activeDocument.artLayers.length<2) return 1;
    var idLyr = charIDToTypeID("Lyr ");
    var idItmI = charIDToTypeID("ItmI");
    var aref = new ActionReference(); 
    aref.putEnumerated(idLyr, charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); 
    var id = executeActionGet(aref).getInteger(charIDToTypeID("LyrI"));
    aref = new ActionReference(); 
    aref.putProperty(charIDToTypeID("Prpr"), idItmI); 
    aref.putIdentifier(idLyr, id); 
    id = executeActionGet(aref).getInteger(idItmI);
    if(id) return id;
    return 0; 
}

// select [LayerNum], optionally [add] to selection (if add=2: with inclusion)
function selLyr(LyrN,add){
    var adesc = new ActionDescriptor();
    var aref = new ActionReference();
    aref.putIndex(charIDToTypeID("Lyr "), LyrN);
    adesc.putReference(charIDToTypeID("null"), aref);
    if(add){
        add = (add==2) ? stringIDToTypeID("addToSelectionContinuous") : stringIDToTypeID("addToSelection");
        adesc.putEnumerated(stringIDToTypeID("selectionModifier"),stringIDToTypeID("selectionModifierType"),add);
    }
    adesc.putBoolean(charIDToTypeID("MkVs"), false);
    return executeAction(charIDToTypeID("slct"), adesc, DialogModes.NO);
}

// move current layer to [LayerNum]
function movLyr(LyrN){
    var idLyr = charIDToTypeID("Lyr ");
    var adesc = new ActionDescriptor();
    var aref = new ActionReference();
    aref.putEnumerated(idLyr, charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    adesc.putReference(charIDToTypeID("null"), aref);
    aref = new ActionReference();
    aref.putIndex(idLyr, LyrN);
    adesc.putReference(charIDToTypeID("T   "), aref);
    adesc.putBoolean(charIDToTypeID("Adjs"), false);
    return executeAction(charIDToTypeID("move"), adesc, DialogModes.NO);
}

// create new empty layer
function mkLyr(){
    var aref = new ActionReference();
    aref.putClass(charIDToTypeID("Lyr "));
    var adesc = new ActionDescriptor();
    adesc.putReference(charIDToTypeID("null"), aref);
    return executeAction(charIDToTypeID("Mk  "), adesc, DialogModes.NO);
}

// count all inner layers from layer-set (group)
function cntLyrS(lyrs,c){
    if(!c){
        if(lyrs.typename!='LayerSet') return 0;
        c = 0;
    }
    var ls = lyrs.layers.length;
    var i = 0;
    while(i<ls){
        c++;
        if(lyrs.layers[i].typename=='LayerSet') c=cntLyrS(lyrs.layers[i],c);
        i++;
    }
    return c+1;
}

// make new layer below current or [LayerNum], optionally [ignoreGroups]
function mkLyrBelow(LyrN,noGr){
    var doc = app.activeDocument;
    if(!doc) return false;
    if(LyrN){
        selLyr(LyrN);
    }else{
        LyrN = curLyrN();
        if(!LyrN) return false;
    }
    var actv = doc.activeLayer;
    if(actv.isBackgroundLayer) actv.isBackgroundLayer=false;
    mkLyr();
    if(curLyrN()==LyrN) return true;
    if(!noGr){
        var lc = cntLyrS(actv);
        if(lc && lc<LyrN-1) LyrN -= lc;
    }
    return movLyr(LyrN-1);
}
//获取当前层号
函数curLyrN(){

如果(app.activeDocument.artLayers.length如果我正确理解了你的问题,
Photoshop
已经有了这些快捷方式

Ctrl+Shift+N(创建新图层)

Ctrl+](向上移动图层)

Ctrl+[(向下移动图层)


这个问题似乎离题了,因为它是关于Photoshop的使用,属于关于
Photoshop脚本的问题,而不是捷径