2016-12-14 11 views
0

RGB 채널에서 마스크를 추출하는 것을 작성하려고합니다.포토샵 자바 스크립트 채널 내용

순수한 R G 및 B 레이어로 출력되는 마스크가있는 .exr 파일이 많이 있습니다.

이걸했던 :

괜찮다 작동
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로 일하고 현재는 3d 제품으로 많은 .exr : s를 얻고 있습니다. VRay는 materialID/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