Как изменить параметры смешивания с помощью сценария фотошопа? - PullRequest
1 голос
/ 08 октября 2011

У меня есть скрипт Photoshop Javascript, который циклически перебирает разные слои, и я хочу придать каждому внешнему слою разное внешнее свечение в зависимости от имени слоя.

Может ли кто-нибудь привести пример того, как программно изменить параметры наложения класса ArtLayer?

1 Ответ

2 голосов
/ 11 октября 2011

К сожалению, нет простого способа добавить стили слоя.

Существует .applyStyle("Puzzle (Image)"), но другие стили не включены в документацию, и я не смог найти другие стили в любом месте.

Таким образом, вы должны использовать обходной путь (сложный и сложный процесс).

Шаг 1 (пропустите, если вы хотите готовое решение)

Прежде всего, вам нужно будет выполнить действие (добавить внешнее свечениев слой), а затем конвертировать в скрипт .jsx.

Вам необходимо использовать этот скрипт для конвертации: http://ps -scripts.cvs.sourceforge.net / viewvc / ps-scripts / xtools / apps/ActionToJavascript.jsx?revision=1.29

Запустите его из Ps или из ExtendScript, выберите свое действие и сохраните его.

Шаг 2

Во вновь созданномСценарий, вы увидите ужасный и нечитаемый код, он будет работать сразу же, однако вам нужно будет сделать функцию, если вы хотите использовать другие настройки (цвет, прозрачность, режим наложения и т. д.).

Вотчистая версия.

cTID = function(s){ return app.charIDToTypeID(s); };
sTID = function(s){ return app.stringIDToTypeID(s); };
// Add Style: Glow
function addStyleGlow( R, G, B, blendingMode, opacity, spread, size ){
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putProperty(cTID('Prpr'), cTID('Lefx'));
ref1.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Trgt'));
desc1.putReference(cTID('null'), ref1);
var desc2 = new ActionDescriptor();
desc2.putUnitDouble(cTID('Scl '), cTID('#Prc'), 100);
// Glow color
var desc4 = new ActionDescriptor();
var rgb = new Array();
desc4.putDouble(cTID('Rd  '), R);
desc4.putDouble(cTID('Grn '), G);
desc4.putDouble(cTID('Bl  '), B);
// Blending mode of the effect
var desc3 = new ActionDescriptor();
desc3.putBoolean(cTID('enab'), true);
desc3.putEnumerated( cTID('Md  '), cTID('BlnM'), cTID(blendingMode) );
desc3.putObject(cTID('Clr '), sTID("RGBColor"), desc4);
// Opacity
desc3.putUnitDouble(cTID('Opct'), cTID('#Prc'), opacity);
desc3.putEnumerated(cTID('GlwT'), cTID('BETE'), cTID('SfBL'));
// Spread
desc3.putUnitDouble(cTID('Ckmt'), cTID('#Pxl'), spread);
// Size
desc3.putUnitDouble(cTID('blur'), cTID('#Pxl'), size);
// Noise
desc3.putUnitDouble(cTID('Nose'), cTID('#Prc'), 0);
// Quality: Jitter
desc3.putUnitDouble(cTID('ShdN'), cTID('#Prc'), 0);
desc3.putBoolean(cTID('AntA'), true);
var desc5 = new ActionDescriptor();
desc5.putString(cTID('Nm  '), "Linear");
desc3.putObject(cTID('TrnS'), cTID('ShpC'), desc5);
// Quality: Range
desc3.putUnitDouble(cTID('Inpr'), cTID('#Prc'), 50);
desc2.putObject(cTID('OrGl'), cTID('OrGl'), desc3);
desc1.putObject(cTID('T   '), cTID('Lefx'), desc2);
executeAction(cTID('setd'), desc1, DialogModes.NO);
}; // End of Add Style: Glow

Шаг 3

Вам понадобитсядругой файл сценария для вызова этой функции, поместите его в ту же папку (замените «antoxa_myGlow.jsx» на имя вашего сценария)

//@include "antoxa_myGlow.jsx"
// R, G, B, blend mode, opacity, spread, size
addStyleGlow(255, 255, 54, 'Nrml', 75, 0, 5);

В настоящее время он будет работать только с одним выбранным слоем,если вы выберете несколько слоев, это даст вам ошибку.Я пока не знаю, как применить функцию к нескольким выбранным слоям.

...