首先,我在一台装有 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。结果在任一系统上都是相同的。
简而言之,我的问题不在于设置变量本身。它与稍后在脚本中正确使用的变量中的值一起使用。包括将变量从一个传递到另一个。
例如
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();
}
}
}
我没有尝试过制作预定义的列表、下拉列表或其他方式。我也没有设置滑块、复选框或任何类似的替代方案。因为没有一个是理想的。我希望能够使用可键入的输入字段设置单元格大小。
我不确定这是预期的行为、我的代码中的缺陷还是需要报告的错误。任何有关为什么会发生这种情况的帮助或见解将不胜感激。
这有点长,所以不要在文本字段中发布我的脚本。完整的当前脚本迭代可在此处获得。对于那些希望看到它的人。