2016-12-14 89 views
0

試圖寫一些從RGB通道中提取遮罩的東西。photoshop javascript channel content

我得到很多.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

+0

自己解決了這個問題: – SEJM

回答

0

通過檢查,如果有做出選擇,即如果沒有做出選擇的解決了這個自己,信道是空的 - >繼續前進。

我工作作爲retoucher,目前我得到很多.exr:s與3d產品。 VRay將materialID/objectID輸出爲RGB-passes。這極大地加速了工作流程。

使用方法如下:將所有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