如何 - Photoshop 脚本 - 合并两层

How To - Photoshop Script - Merge Two Layers

我的 Photoshop Canvas 是 900X600。

下面的函数采用 X 层 并制作 X 层副本

需要 X 层复制,并在保持比例的同时将高度调整为 600px。 var newdLayer

它需要 X 层,在保持比率的同时将宽度调整为 900px 并应用高斯模糊。 var blur.

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

显然有一个 merge() 函数,但为此你必须创建一个 layerset。在 javascript.

不是真正的专业人士

如何合并两个图层?

(function (){

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

newdLayer;

    var startRulerUnits = app.preferences.rulerUnits;  
    app.preferences.rulerUnits = Units.PIXELS;  
    var bounds = newdLayer.bounds;  
    var height = bounds[3].value - bounds[1].value;
    var newSize = (100 / height) * 600;  
    newdLayer.resize(newSize, newSize, AnchorPosition.MIDDLECENTER);
    app.preferences.rulerUnits = startRulerUnits;  

var blur = docRef.activeLayer;

    var startRulerUnits = app.preferences.rulerUnits;  
    app.preferences.rulerUnits = Units.PIXELS;  
    var bounds = blur.bounds;  
    var width = bounds[2].value - bounds[0].value;
    var newSize = (100 / width) * 900;  
    blur.resize(newSize, newSize, AnchorPosition.MIDDLECENTER);
    app.preferences.rulerUnits = startRulerUnits;  
    blur.applyGaussianBlur(5)

blur;


})();

我修改了你的函数,删除了一些多余的步骤,并在末尾添加了一个有助于创建新 layerSet 的片段,将 newdLayerblur 层移动到集合中,并合并该集合:

(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;

})();

附带说明,merge() 方法也可用于 artLayers,但根据您的文档的层数和层的顺序,它可能需要额外的步骤使用 artLayers 方法合并 2 层。这是因为 artLayers merge() 方法只是将活动层与其下方的层合并。当图层被复制时,我相信它们被放置在 artLayers 集合中的索引 0 处,这将是图层面板中最顶层的图层。如果您的源图层不在索引 0,那么您需要在 merge();

之前对图层进行排序