[FIXED] Wie zentrieren Sie eine Ebene in einem Photoshop -Skript?

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.

Anschließend werden Layer X und Layer X copy zusammengeführt .

Das Problem ist, dass, wenn Layer X nicht am Anfang des Skripts zentriert ist, eine Fehlfunktion auftritt.

Wie füge ich am Anfang des Skripts der Ebene X eine mittlere Ebene hinzu?

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

})();

Lösung

Was Sie tun müssen, ist, die Differenz zwischen der Ebenenmitte und der Dokumentenmitte zu berechnen und dann die blurEbene um diese Differenz zu verschieben, bevor Sie eine Kopie erstellen.

Um die Ebenenmitte zu berechnen, nehmen Sie bound[0].valueund bound[1].value(Abstände von der linken oberen Ecke des Dokuments zur oberen linken Ecke der Ebene) und addieren die Hälfte von widthund die Hälfte von height. Um dann die Deltas zu berechnen, subtrahieren Sie die Koordinaten des Ebenenmittelpunkts von den Koordinaten des Dokumentmittelpunkts.

Hier ist der Code:

(function()
{

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

    var docRef = activeDocument;
    var blur = docRef.activeLayer;

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

    /////////////////////////////////////////////////////////////////////////////////////
    // Centering the layer

    // Getting center coordinates of the document
    var docCenterW = docRef.width.as("px") / 2;
    var docCenterH = docRef.height.as("px") / 2;

    // getting values to translate the layer. 
    var deltaX = Math.round(docCenterW - (bounds[0].value + width / 2));
    var deltaY = Math.round(docCenterH - (bounds[1].value + height / 2));

    blur.translate(deltaX, deltaY);
    /////////////////////////////////////////////////////////////////////////////////////

    var newdLayer = blur.duplicate();

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

})();


Beantwortet von –
Sergey Kritskiy


Antwort geprüft von –
Jay B. (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] Photoshop -Automatisierung

Ausgabe Ich möchte Photoshop-Aktionen über die Visual Basic-Benutzeroberfläche ausführen. Ich meine, wenn der Benutzer auf die Schaltfläche klickt,…