Photoshop JavaScript 图层创建

4
您可以通过该片段大概猜到我想做什么:
var docRef = app.activeDocument;

var layerRef = app.activeDocument.artLayers.add();
layerRef.kind = LayerKind.SOLIDFILL;

我想编写一个脚本来创建填充图层(然后稍后指定颜色、删除遮罩等)。但是,从ExtendScript Toolkit中获得了以下响应:

"你只能将图层的类型更改为文本或正常"

我原以为可以通过一些方式向artLayersadd()方法传递参数?难道我错过了一些非常简单的东西吗?谢谢。

我知道这可以通过动作完成,但我想学习如何完成这个(看起来)非常简单的任务,并在此基础上构建更复杂、有用的脚本。

另外,我不知道这是否重要,但我正在运行Ps CC15,ES Toolkit 4,并使用脚本参考CC14。


虽然这是脚本编写,但您可能还想尝试在http://graphicdesign.stackexchange.com/和/或http://superuser.com/上提问。 - Jon P
1个回答

2

对于简单的填充,您只需要将第三行更改为

app.activeDocument.selection.fill(app.foregroundColor, ColorBlendMode.NORMAL, 100, false);

如果你想在脚本中添加新的实心填充,我已经添加了一个函数来完成这个任务。实心填充使用RGB颜色,前景色使用HEX颜色。
var docRef = app.activeDocument;

var layerRef = app.activeDocument.artLayers.add();

// set the foreground colour
var myColour = "F7E7CE";
setColour(myColour);

// fill this
// app.activeDocument.selection.fill(app.foregroundColor, ColorBlendMode.NORMAL, 100, false);

//or
// new solid fill
fillSolidColour(247,231,206);


// function SET COLOUR (hexcolour, set background?)
// --------------------------------------------------------
function setColour(hexcolour)
{
    // set foreground colour to matching colour
    var tempColor = new SolidColor;
    hexcolour = hexcolour.toString(); // stringify it

    tempColor.rgb.hexValue = hexcolour;

    // set foreground
    foregroundColor = tempColor;
}


function fillSolidColour(R, G, B)
{
  // =======================================================
  var id117 = charIDToTypeID( "Mk  " );
  var desc25 = new ActionDescriptor();
  var id118 = charIDToTypeID( "null" );
  var ref13 = new ActionReference();
  var id119 = stringIDToTypeID( "contentLayer" );
  ref13.putClass( id119 );
  desc25.putReference( id118, ref13 );
  var id120 = charIDToTypeID( "Usng" );
  var desc26 = new ActionDescriptor();
  var id121 = charIDToTypeID( "Type" );
  var desc27 = new ActionDescriptor();
  var id122 = charIDToTypeID( "Clr " );
  var desc28 = new ActionDescriptor();
  var id123 = charIDToTypeID( "Rd  " );
  desc28.putDouble( id123, R ); //red
  var id124 = charIDToTypeID( "Grn " );
  desc28.putDouble( id124, G ); //green
  var id125 = charIDToTypeID( "Bl  " );
  desc28.putDouble( id125, B ); //blue
  var id126 = charIDToTypeID( "RGBC" );
  desc27.putObject( id122, id126, desc28 );
  var id127 = stringIDToTypeID( "solidColorLayer" );
  desc26.putObject( id121, id127, desc27 );
  var id128 = stringIDToTypeID( "contentLayer" );
  desc25.putObject( id120, id128, desc26 );
  executeAction( id117, desc25, DialogModes.NO );
}

你好,感谢您的回复。我很感激您展示了使用操作创建所需填充层而不仅仅是填充普通艺术层的解决方案。我知道可以用这种方式来实现,但它并不能真正帮助我创建可读性强、模块化的代码。是否有办法使用artLayers对象的add()方法创建填充层呢? - sam
你应该可以使用原始脚本创建一个新的纯色填充,就像 layerRef.kind = LayerKind.TEXT 会创建一个新的文本图层一样。但在图层创建之前,你可能需要添加更多的代码。Adobe 的文档很少。 Adobe 脚本论坛 可能会对你有所帮助。 - Ghoul Fool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接