Javascript 如何-Photoshop脚本-合并两个图层

Javascript 如何-Photoshop脚本-合并两个图层,javascript,merge,photoshop,layer,extendscript,Javascript,Merge,Photoshop,Layer,Extendscript,我的Photoshop画布是900X600 下面的函数获取层X,并进行层X复制 它需要第X层拷贝,在保持比率的同时,将高度调整为600pxvar newdLayer 它采用层X,在保持该比率的同时,将宽度调整为900px并应用高斯模糊变量模糊 然后我想合并层X副本和层X 显然有一个merge()函数,但为此,您必须包装一个layerset。不是一个真正的javascript专家 如何合并这两个层 (函数(){ var docRef=activeDocument var newdLayer=do

我的Photoshop画布是900X600

下面的函数获取层X,并进行层X复制

它需要第X层拷贝,在保持比率的同时,将高度调整为600px<代码>var newdLayer

它采用层X,在保持该比率的同时,将宽度调整为900px并应用高斯模糊<代码>变量模糊

然后我想合并层X副本层X

显然有一个
merge()
函数,但为此,您必须包装一个
layerset
。不是一个真正的javascript专家

如何合并这两个层

(函数(){
var docRef=activeDocument
var newdLayer=docRef.activeLayer.duplicate();
纽德莱尔;
var startRulerUnits=app.preferences.rulerUnits;
app.preferences.rulerUnits=单位.PIXELS;
var-bounds=newdLayer.bounds;
变量高度=界限[3]。值-界限[1]。值;
var newSize=(100/高度)*600;
调整大小(newSize、newSize、AnchorPosition.MIDDLECENTER);
app.preferences.rulerUnits=startRulerUnits;
var blur=docRef.activeLayer;
var startRulerUnits=app.preferences.rulerUnits;
app.preferences.rulerUnits=单位.PIXELS;
var-bounds=blur.bounds;
变量宽度=边界[2]。值-边界[0]。值;
var newSize=(100/宽度)*900;
调整大小(新闻大小、新闻大小、AnchorPosition.MIDDLECENTER);
app.preferences.rulerUnits=startRulerUnits;
模糊。applyGaussianBlur(5)
变得模糊不清

})();
我修改了您的函数,删除了一些多余的步骤,并在末尾添加了一个片段,以便于创建一个新的
layerSet
,将
newdLayer
blur
层移动到集合中,并合并该集合:

(function (){

var docRef = activeDocument
var blur = docRef.activeLayer;
var newdLayer = blur.duplicate();

    var startRulerUnits = app.preferences.rulerUnits;
    app.preferences.rulerUnits = Units.PIXELS;

    // since we resize based on the initial size of the source layer, 
    // we don't need to get the bounds twice
    var bounds = blur.bounds;
    var height = bounds[3].value - bounds[1].value;
    var width = bounds[2].value - bounds[0].value;
    // declare 2 different vars for your sizes (there are better ways to do this, but
    // since you say you aren't a JavaScript pro, I figured I'd keep it simple)
    var newSize600 = (100 / height) * 600;
    var newSize900 = (100 / width) * 900;
    // resize your layers
    newdLayer.resize(newSize600, newSize600, AnchorPosition.MIDDLECENTER);
    blur.resize(newSize900, newSize900, AnchorPosition.MIDDLECENTER);
    // apply blur
    blur.applyGaussianBlur(5);

    // below creates the group, moves the layers to it and merges them. Feel free to just include this part
    // at the end of your function if you don't want to use the modified code above. 

    // create a new layer set
    var groupOne = docRef.layerSets.add();

    // move the blur layer inside the layer set and name the layer for posterity
    blur.move(groupOne, ElementPlacement.INSIDE);
    blur.name = "blur";

    // move the newdLayer inside and rename
    newdLayer.move(groupOne, ElementPlacement.INSIDE);
    newdLayer.name = "newdLayer";

    // merge the layer set and name the new layer
    var mergedGroup = groupOne.merge();
    mergedGroup.name = "newdLayer + blur";

    app.preferences.rulerUnits = startRulerUnits;

})();

作为旁注,
artLayers
也可以使用
merge()
方法,但根据文档的层数和层数顺序,可能需要额外的步骤才能使用
artLayers
方法合并这两个层。这是因为
artLayers
merge()
方法只需将处于活动状态的层与其下方的层合并。当图层被复制时,我相信它们被放置在
artLayers
集合的索引0处,这将是图层调色板中最顶层的图层。如果源层不在索引0处,则需要在
merge()
之前对层进行排序

很好!谢谢