【问题标题】:How do you center a layer in a Photoshop script?如何在 Photoshop 脚本中将图层居中?
【发布时间】:2019-08-20 00:32:05
【问题描述】:

我的 Photoshop 画布是 900X600。

下面的函数获取Layer X并制作Layer X

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

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

然后合并Layer XLayer X copy

问题在于,如果 X 层 不在脚本开头居中,则会出现故障。

如何在脚本开头的Layer X中添加中心层?

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

})();

【问题讨论】:

    标签: javascript photoshop layer


    【解决方案1】:

    您需要做的是计算图层中心和文档中心之间的差异,然后在复制之前将blur 图层转换为该差异。

    要计算图层中心,您需要使用bound[0].valuebound[1].value(从文档左上角到图层左上角的距离)并添加一半的width 和一半的@987654325 @。然后计算增量,从文档中心坐标中减去图层中心坐标。

    代码如下:

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

    【讨论】:

    • 效果很好!谢谢!
    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2013-11-26
    • 2015-02-19
    • 2012-03-13
    • 2020-06-03
    • 2013-01-12
    相关资源
    最近更新 更多