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