пытаюсь написать что-то, что извлекает маски из RGB-каналов.
Я получаю много файлов .exr с масками, выводимыми как чистые слои RGB и B.
я сделал это:
var doc = app.activeDocument;
function showMasks(docGroups) {
//step through the groups
for (var i=0; i<docGroups.length; i++) {
try{
//step through the layers in each group
for(layerIndex=0; layerIndex < docGroups[i].artLayers.length; layerIndex++) {
var RGB = [doc.channels.getByName('Red'),doc.channels.getByName('Green'),doc.channels.getByName('Blue')];
for(var a in RGB)
{
//create slection from channel
doc.selection.load(RGB[a], SelectionType.REPLACE);
//add new layer
doc.artLayers.add();
// REVEAL ALL from selection
var idMk = charIDToTypeID( "Mk " );
var desc62 = new ActionDescriptor();
var idNw = charIDToTypeID( "Nw " );
var idChnl = charIDToTypeID( "Chnl" );
desc62.putClass( idNw, idChnl );
var idAt = charIDToTypeID( "At " );
var ref20 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref20.putEnumerated( idChnl, idChnl, idMsk );
desc62.putReference( idAt, ref20 );
var idUsng = charIDToTypeID( "Usng" );
var idUsrM = charIDToTypeID( "UsrM" );
var idRvlS = charIDToTypeID( "RvlS" );
desc62.putEnumerated( idUsng, idUsrM, idRvlS );
executeAction( idMk, desc62, DialogModes.NO );
}
//hide layer, move on to the next
docGroups[i].artLayers[layerIndex].visible = false;
}
}
catch(e){continue;}
}
}
showMasks(doc.layerSets);
который работает нормально, проходит через группы и слои и выводит новые слои с масками слоев на них соответственно. однако это работает только в том случае, если слой содержит R G и B, если это слой только с одним цветом, он останавливается. как заставить его продолжать работать, если слой не содержит все 3 цвета канала? или переписать делать по одному каналу за раз?
любые идеи высоко ценятся, спасибо / S