Этот скрипт берет последний примененный фильтр и повторяет его на всех выбранных слоях и масках. (Он разработан, чтобы избежать необходимости сворачивать слои в смарт-объект для пакетного применения фильтров).
Однако в нем есть ошибка, которую я не могу понять: она прекрасно работает для чего-то как Gaussian Blur, но для Liquify он записывает в историю, что фильтр был применен, но слои остаются нетронутыми.
Шаги для воспроизведения: 1. Слой размытия 1. 2. Выбрать слои 2 (с маской) и 3 (без маски) 3. Выполнить скрипт 4. Повторить 1-3, но с сжижением вместо размытия.
#target photoshop
var defaultRulerUnits = preferences.rulerUnits; preferences.rulerUnits = Units.PIXELS;
var doc = app.activeDocument;
var layers = doc.layers;
var typeArray = new Array ();
var isim = new Array();
cTID = function(s) { return app.charIDToTypeID(s); }; sTID = function(s) { return app.stringIDToTypeID(s); };
function repeatlastfilter() {
runMenuItem(cTID("LstF"), true);
}
function checklayermask() {
try {
Select_Layermask();
}
catch (err) { return }
repeatlastfilter();
Select_Original_Layer();
}
// MAIN
function main()
{
app.bringToFront();
var SelectedLayers = getSelectedLayers();
for (var i = 0; i < SelectedLayers.length; i++)
{
doc.activeLayer = SelectedLayers[i];
isim[i] = SelectedLayers[i].name;
//selectlayer(isim[i]);
//alert (isim[i]);
repeatlastfilter();
checklayermask();
//doAction(DDActions.selection.text, DDActionSet.selection.text);
}
}
// SELECT ORIGINAL LAYER
function Select_Original_Layer(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(cTID('Chnl'), cTID('Chnl'), sTID("RGB"));
desc1.putReference(cTID('null'), ref1);
desc1.putBoolean(cTID('MkVs'), false);
executeAction(cTID('slct'), desc1, dialogMode);
};
// SELECT LAYER MASK
function Select_Layermask(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(cTID('Chnl'), cTID('Chnl'), cTID('Msk '));
desc1.putReference(cTID('null'), ref1);
desc1.putBoolean(cTID('MkVs'), false);
executeAction(cTID('slct'), desc1, dialogMode);
};
// GET SELECTED LAYERS
function getSelectedLayers()
{
var resultLayers=new Array();
try{
var descGrp = new ActionDescriptor();
var refGrp = new ActionReference();
refGrp.putEnumerated(cTID( "Lyr " ),cTID( "Ordn" ),cTID( "Trgt" ));
descGrp.putReference(cTID( "null" ), refGrp );
executeAction( sTID( "groupLayersEvent" ), descGrp, DialogModes.NO );
for (var ix=0;ix<app.activeDocument.activeLayer.layers.length;ix++){resultLayers.push(app.activeDocument.activeLayer.layers[ix])}
var desc5 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putEnumerated( cTID( "HstS" ), cTID( "Ordn" ), cTID( "Prvs" ) );
desc5.putReference( cTID( "null" ), ref2 );
executeAction( cTID( "slct" ), desc5, DialogModes.NO );
} catch (err) { }
return resultLayers;
}
main();