Photoshop JavaScript层创建

Photoshop JavaScript层创建,javascript,photoshop,photoshop-script,Javascript,Photoshop,Photoshop Script,你可能可以通过这个片段猜出我想做什么: var docRef = app.activeDocument; var layerRef = app.activeDocument.artLayers.add(); layerRef.kind = LayerKind.SOLIDFILL; 我想为填充层的创建编写脚本(然后指定颜色、移除遮罩等)。我从ExtendScript工具包中得到以下响应: “您只能将图层的种类更改为文本或普通” 我本以为有一种方法可以将某种类型的参数传递给artLayers的a

你可能可以通过这个片段猜出我想做什么:

var docRef = app.activeDocument;

var layerRef = app.activeDocument.artLayers.add();
layerRef.kind = LayerKind.SOLIDFILL;
我想为填充层的创建编写脚本(然后指定颜色、移除遮罩等)。我从ExtendScript工具包中得到以下响应: “您只能将图层的种类更改为文本或普通”

我本以为有一种方法可以将某种类型的参数传递给
artLayers
add()
方法?!我错过了一些非常简单的东西吗?谢谢

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


另外,我不知道这是否重要,但我正在运行Ps CC15、ES toolkit 4,并使用脚本引用CC14进行简单填充,您只需将第三行更改为

app.activeDocument.selection.fill(app.foregroundColor, ColorBlendMode.NORMAL, 100, false);
如果你想给脚本添加一个新的实体填充,我已经给它添加了一个函数。实心填充与RGB颜色配合使用,前景色与十六进制颜色配合使用

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

在编写脚本时,您可能还想尝试询问at和/或Hi,并感谢您的回复。我很感谢你展示的解决方案,它利用动作来创建我想要的填充层,而不仅仅是填充的普通艺术层。我知道可以这样做,但这并不能真正帮助我创建可读的模块化代码。没有办法使用artLayers对象的add()方法创建填充层吗?您应该能够使用原始脚本创建新的纯色填充。很像
layerRef.kind=LayerKind.TEXT
将创建一个新的文本层。但在创建层之前,可能需要添加更多代码。Adobe的文档很少。这可能会帮助你