【发布时间】:2017-04-29 21:29:43
【问题描述】:
尝试编写从 RGB 通道中提取遮罩的东西。
我得到了很多带有掩码输出的 .exr 文件作为纯 R G 和 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
【问题讨论】:
-
自己解决了这个问题:
标签: javascript rgb photoshop photoshop-script channels