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