Ausgabe
Meine Photoshop-Leinwand ist 900 x 600.
Die folgende Funktion nimmt Layer X und kopiert Layer X.
Es wird Layer X kopiert und unter Beibehaltung des Verhältnisses wird die Höhe auf 600 Pixel angepasst.var newdLayer
Es nimmt Ebene X und passt unter Beibehaltung des Verhältnisses die Breite auf 900 Pixel an und wendet die Gaußsche Unschärfe an. var blur
.
Ich möchte dann Layer X copy und Layer X zusammenführen .
Anscheinend gibt es eine merge()
Funktion, aber dafür muss man eine layerset
. Nicht wirklich ein Profi in Javascript.
Wie werden die beiden Ebenen zusammengeführt?
(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;
})();
Lösung
Ich habe Ihre Funktion geändert, indem ich einige überflüssige Schritte eliminiert und am Ende einen Ausschnitt hinzugefügt habe, der das Erstellen einer neuen layerSet
, das Verschieben der Ebenen newdLayer
und blur
in das Set und das Zusammenführen dieses Sets erleichtert:
(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;
})();
Als Nebenbemerkung steht auch eine merge()
Methode zur Verfügung artLayers
, aber je nach Anzahl der Ebenen in Ihrem Dokument und der Reihenfolge der Ebenen können zusätzliche Schritte erforderlich sein, um die beiden Ebenen mit der artLayers
Methode zusammenzuführen. Dies liegt daran, dass die artLayers
merge()
Methode einfach die aktive Ebene mit der darunter liegenden zusammenführt. Wenn Ebenen dupliziert werden, werden sie meiner Meinung nach auf Index 0 in der artLayers
Sammlung platziert, was die oberste Ebene in der Ebenenpalette wäre. Wenn Ihre Quellebene nicht bereits bei Index 0 war, müssen Sie die Ebenen vor sortieren merge()
.
Beantwortet von – InternetRebel
Antwort geprüft von – Cary Denson (FixError Admin)