Photoshop JavaScript 图层创建
Posted
技术标签:
【中文标题】Photoshop JavaScript 图层创建【英文标题】:Photoshop JavaScript Layer creation 【发布时间】:2015-09-20 19:56:47 【问题描述】:通过这个 sn-p,你大概能猜到我要做什么:
var docRef = app.activeDocument;
var layerRef = app.activeDocument.artLayers.add();
layerRef.kind = LayerKind.SOLIDFILL;
我想编写创建填充层的脚本(然后指定颜色、移除遮罩等)。我从 ExtendScript Toolkit 得到这个响应: "您只能将图层的种类更改为文本或普通"
我原以为会有一种方法可以将某种参数传递给artLayers
的add()
方法?!我错过了一些非常简单的东西吗?谢谢。
我知道这可以通过动作来完成,但我想学习如何完成这个(看似)非常简单的任务,并在此基础上创建更复杂、更有用的脚本。
另外,我不知道这是否重要,但我正在运行 Ps CC15、ES 工具包 4,并使用脚本参考 CC14
【问题讨论】:
在编写脚本时,您可能还想尝试在graphicdesign.stackexchange.com 和/或superuser.com 询问 【参考方案1】:对于一个简单的填充,你只需要将第三行改为
app.activeDocument.selection.fill(app.foregroundColor, ColorBlendMode.NORMAL, 100, false);
如果您想在脚本中添加新的实体填充,我已经添加了一个函数。实心填充适用于 RGB 颜色,前景色适用于 HEX cols
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()方法创建填充层? 您应该能够使用您拥有的原始脚本创建一个新的纯色填充。很像layerRef.kind = LayerKind.TEXT
将创建一个新的文本层。但在创建层之前,您可能需要添加更多代码。 Adobe 的文档很薄。 adobe scripting forum 可能会帮助你以上是关于Photoshop JavaScript 图层创建的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Photoshop JavaScript API 中加载图层透明度并保存为路径?
Photoshop 脚本 - 如何在 2 个链接图层组之间切换