Photoshop / ESTK - 预处理的数值与用户输入

时间:2015-06-16 10:24:03

标签: javascript photoshop-script

首先,我在桌面上使用OS X 10.9&带有OS X 10.10的Macbook以及最新版本的Photoshop& ESTK。截至目前为止:Photoshop CC 2015529.r.88 x64,ESTK 4.0.0.1 - ExtendedScript 4.5.5& ScriptUI 6.2.2。两个系统的结果都是相同的。

简而言之,我的问题不在于设置变量本身。它是在稍后在脚本中正确使用变量中的值。包括将变量从on传递给另一个。

e.g。

    var dflt = 16
    var z = dflt

我要做的主要是将用户输入的数值传递给变量。然后在脚本的另一部分准确使用该值。当在用户输入之外的脚本中定义变量时,一切都很完美。添加用户输入后,可以准确地重复变量。

例如使用:

    alert('The variable is currently set to: ' + value);

然而,在photoshop中运行时,结果并不像预期的那样。

脚本执行或应该执行的操作。采取活动层&将整个事物切割成预定义的网格。每个切口都放在它自己的层上。正如我已经说过的那样。当网格被预定义时,一切都是完美无瑕的。但是当添加用户输入时。网格完全倾斜。只有网格的第一个单元格/图层是准确的。尽管可以预见,其他所有东西都会被奇怪地拼凑起来。

我尝试过使用:

document.getElementById("numb")

Chrome和&#; Firefox浏览器。但是在Photoshop或ESTK中运行时会崩溃。

prompt

提供了倾斜/镶嵌结果。

以及对话窗口:

    // begin dialog layout
    var GridLayersDialog = new Window('dialog');
    GridLayersDialog.text = 'Grid To Layers';
    GridLayersDialog.frameLocation = [70, 70];
    GridLayersDialog.alignChildren = 'center';


    GridLayersDialog.GridSizePnl = GridLayersDialog.add('panel', [2, 2, 200, 70], 'Grid Size');
    GridLayersDialog.GridSizePnl.add('statictext', [10, 16, 79, 48], 'Dimensions: ');
    GridLayersDialog.GridSizePnl.aspectDimension = GridLayersDialog.GridSizePnl.add('edittext', [85, 13, 120, 34], dfltCs, {name:'cellSize'});
    GridLayersDialog.GridSizePnl.aspectDimension.helpTip = 'Width & Height in pixels';


    var buttons = GridLayersDialog.add('group');
    buttons.orientation = 'row';
    var okBtn = buttons.add('button');
    okBtn.text = 'OK';
    okBtn.properties = {name: 'ok'};
    var cancelBtn = buttons.add('button');
    cancelBtn.text = 'Cancel';
    cancelBtn.properties = {name: 'cancel'};


    // display dialog and only continues on OK button press (OK = 1, Cancel = 2)
    if (GridLayersDialog.show() == 1) {
        cellSize = String(GridLayersDialog.GridSizePnl.cellSize.text); etc...

这也提供了偏差的结果。

原始的'无瑕疵的',脚本如下:

    // Size of cell in pixels
    var cellSize = 16;

    // Set the ruler type
    if (app.preferences.rulerUnits != Units.PIXELS)
    {
        app.preferences.rulerUnits = Units.PIXELS;
    }

    var layerRef = docRef.activeLayer;

    for (y = 0; y<docRef.height; y+=cellSize)
    {
        for (x = 0; x<docRef.width; x+=cellSize)
        {
            //activate the original layer
            docRef.activeLayer = layerRef;
            //make the selection
            docRef.selection.select(Array (Array(x, y), Array(x, y+cellSize), Array(x+cellSize,y+cellSize), Array(x+cellSize,y)), SelectionType.REPLACE, 0, false);

            //copy the selection
            docRef.selection.copy();
            //create and paste new layer
            docRef.artLayers.add();
            docRef.paste();
            }
        }
    }

我还没有尝试制作预定义列表,下拉列表或其他内容。我也没有设置滑块,复选框或任何类似的替代方案。没有一个是理想的。我希望能够用一个典型的输入字段设置单元格大小。

我不确定这是否是预期的行为,我的代码中的缺陷或需要报告的错误。任何有关为何发生这种情况的帮助或见解将不胜感激。

这有点长,所以不要在文本字段中发布我的脚本。脚本的当前迭代完整可用here。对于那些希望看到它的人。

1 个答案:

答案 0 :(得分:1)

我已经查完了你的剧本:这可能会有所帮助:

    var dfltCs = 16;

    // begin dialog layout
    var GridLayersDialog = new Window('dialog');
    GridLayersDialog.center();
    GridLayersDialog.text = 'Grid To Layers';
    GridLayersDialog.frameLocation = [70, 70];
    GridLayersDialog.alignChildren = 'center';


    GridLayersDialog.GridSizePnl = GridLayersDialog.add('panel', [2, 2, 200, 70], 'Grid Size');
    GridLayersDialog.GridSizePnl.add('statictext', [10, 16, 79, 48], 'Dimensions: ');
    GridLayersDialog.GridSizePnl.aspectDimension = GridLayersDialog.GridSizePnl.add('edittext', [85, 13, 120, 34], dfltCs, {name:'cellSize'});
    GridLayersDialog.GridSizePnl.aspectDimension.helpTip = 'Width & Height in pixels';
    // Room left for additional data in future update.
    cellSize = String(GridLayersDialog.GridSizePnl.cellSize.text); if (cellSize=="") { cellSize = dfltCs;} // Set user input to variable

    GridLayersDialog.add ("button", undefined, "OK");
    if (GridLayersDialog.show () == 1)
    {
    var v = GridLayersDialog.GridSizePnl.aspectDimension.text;
    alert('The variable is currently set to: ' + v);
    }

所有更改都在最后几行。要获取edittext(字符串)的值,您需要以下内容:

var v = GridLayersDialog.GridSizePnl.aspectDimension.text

我希望这会有所帮助。