2016-12-14 15 views
0

пытается написать что-то, что извлекает маски из RGB-каналов.photoshop содержание канала javascript

Я получаю много файлов .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, если это слой с одним цветом, он останавливается. как я могу его продолжать работать, если слой не содержит всех трехканальных цветов? или переписать один канал за раз?

любых идей высоко ценятся, спасибо/S

+0

решил это сам: – SEJM

ответ

0

решить эти себя, проверяя, есть ли выбор сделано, то есть, если нет выбора сделал, канал пуст -> двигаться дальше.

Я работаю ретушером, и в настоящее время я получаю много .exr: s с 3d-продуктами. VRay выводит материалID/objectID как RGB-передает. это значительно ускоряет рабочий процесс.

использовать как это: поместить все RGB-проходы в группу, скрыть все остальные слои. скрипт вызова.

var doc = app.activeDocument; 
var a=0; 

function hasSelection (doc) { 
    var ret = false; 
    var as = doc.activeHistoryState; 
    doc.selection.deselect(); 
    if (as != doc.activeHistoryState) { 
     ret = true; 
     doc.activeHistoryState = as; 
    } 
    return ret; 
} 

    function showMasks(docGroups) {  

     //this steps through the groups 
     for (var i=0; i<docGroups.length; i++) { 

     try{ 

      // this steps through the layers in each group 
      for(layerIndex=0; layerIndex < docGroups[i].artLayers.length; layerIndex++) { 

      //visible layers only  
      if(docGroups[i].artLayers[layerIndex].visible == true){ 

      //var layer=docGroups[i].artLayers[layerIndex]; 
      var RGB = [doc.channels.getByName('Red'),doc.channels.getByName('Green'),doc.channels.getByName('Blue')]; 

       for(a in RGB) 
       { 
        //create slection from channel 
        doc.selection.load(RGB[a], SelectionType.REPLACE); 

        if(hasSelection(activeDocument)){ 

        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); 

        } 
        else{a++;} 

       } 
      //hide layer, move on to the next 
      docGroups[i].artLayers[layerIndex].visible = false; 
      } 
     } 

      }  
      catch(e){return;} 

    } 
} 

showMasks(doc.layerSets); 

ура./S