3 Replies Latest reply on Oct 22, 2015 1:38 AM by c.pfaffenbichler

    Make Layers from slices or guides.

    MikeGondek Adobe Community Professional & MVP

      Mac CC 2015. Would like to convert each slice or guided division into an individual layer with the mask.

       

      Below is an example , where I would want a layer for each slice, including the mask. 

       

      Screen Shot 2015-10-14 at 3.04.34 PM.png

       

      There was an extension called cut & slice me, but cannot even get that to install with CS6.

       

      Manually doing this is more time consuming in CC2015, as when you float a selection, the layer mask does not go over.

       

      Is easier for me to mask 1 layer and then make copies, rather than make 25 layers then have to mask 25 layers. The tool & layer swithching and brush sizes changing is a lot more work masking after the 25 layers are made.

        • 1. Re: Make Layers from slices or guides.
          c.pfaffenbichler Level 9

          Could you give this a try?

          // split layer with layer mask according to guides;

          // 2015, use it at your own risk;

          #target photoshop

          if (app.documents.length > 0) {

          var myDocument = app.activeDocument;

          var myResolution = myDocument.resolution;

          var theLayer = myDocument.activeLayer;

          var layerID = getLayerId(theLayer);

          var originalRulerUnits = app.preferences.rulerUnits;

          app.preferences.rulerUnits = Units.POINTS;

          // check guides;

          var theVer = new Array;

          var theHor = new Array;

          var theNumber = myDocument.guides.length;

          for (var m = 0; m < theNumber; m++) {

          if (myDocument.guides[m].direction == Direction.HORIZONTAL) {theHor.push(myDocument.guides[m].coordinate)};

          if (myDocument.guides[m].direction == Direction.VERTICAL) {theVer.push(myDocument.guides[m].coordinate)};

          };

          // sort and add beginning and end;

          theHor = treatGuideArray (theHor, app.activeDocument.width);

          theVer = treatGuideArray (theVer, app.activeDocument.height);

          $.writeln(theHor.join("\n")+"\n\n\n"+theVer.join("\n"));

          // create selections;

          for (var y = 0; y < theHor.length - 1; y++) {

            var Y1 = theHor[y];

            var Y2 = theHor[y+1];

            for (var x = 0; x < theVer.length - 1; x++) {

            try {

            var X1 = theVer[x];

            var X2 = theVer[x+1];

            rectangularSelection([Y1, X1, Y2, X2], false);

          // layer via copy;

            var id14 = charIDToTypeID( "CpTL" );

            executeAction( id14, undefined, DialogModes.NO );

          // add mask;

            intersectedLayerMask (layerID)

            } catch (e) {};

          // reselct layer;

            myDocument.activeLayer = theLayer;

            };

            };

          // reset the ruler units;

          app.preferences.rulerUnits = originalRulerUnits

          };

          ////////////////// the functions //////////////////

          ////// treat array //////

          function treatGuideArray (theArray, theExtreme) {

          theArray.sort(function(a,b){return a - b});

          if (Number (theArray[theArray.length - 1]) != theExtreme) {theArray.push(theExtreme)};

          if (Number (theArray[0]) != 0) {theArray.unshift(new UnitValue(0, "pt"))};

          theArray.sort(function(a,b){return a - b});

          return theArray;

          };

          ////// rectangular selection //////

          function rectangularSelection (theBounds, add) {

          // =======================================================

          if (add == false ||  add == undefined) {var idsetd = charIDToTypeID( "setd" )}

          else {var idsetd = charIDToTypeID( "AddT" )};

              var desc55 = new ActionDescriptor();

              var idnull = charIDToTypeID( "null" );

                  var ref11 = new ActionReference();

                  var idChnl = charIDToTypeID( "Chnl" );

                  var idfsel = charIDToTypeID( "fsel" );

                  ref11.putProperty( idChnl, idfsel );

              desc55.putReference( idnull, ref11 );

              var idT = charIDToTypeID( "T   " );

                  var desc56 = new ActionDescriptor();

                  var idTop = charIDToTypeID( "Top " );

                  var idRlt = charIDToTypeID( "#Rlt" );

                  desc56.putUnitDouble( idTop, idRlt, theBounds[0] );

                  var idLeft = charIDToTypeID( "Left" );

                  var idRlt = charIDToTypeID( "#Rlt" );

                  desc56.putUnitDouble( idLeft, idRlt, theBounds[1] );

                  var idBtom = charIDToTypeID( "Btom" );

                  var idRlt = charIDToTypeID( "#Rlt" );

                  desc56.putUnitDouble( idBtom, idRlt, theBounds[2] );

                  var idRght = charIDToTypeID( "Rght" );

                  var idRlt = charIDToTypeID( "#Rlt" );

                  desc56.putUnitDouble( idRght, idRlt, theBounds[3] );

              var idRctn = charIDToTypeID( "Rctn" );

              desc55.putObject( idT, idRctn, desc56 );

          executeAction( idsetd, desc55, DialogModes.NO );

          };

          // by mike hale, via paul riggott;

          function getLayerId(theLayer){

          // http://forums.adobe.com/message/1944754#1944754

          app.activeDocument.activeLayer = theLayer;

          //Assumes activeDocument and activeLayer

              var ref = new ActionReference();

              ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));

              d = executeActionGet(ref);

          return d.getInteger(charIDToTypeID('LyrI'));

          };

          ////// load transparency, ontersect with layer mask ofd another layer, add layer mask //////

          function intersectedLayerMask (layerID) {

          var idChnl = charIDToTypeID( "Chnl" );

          // =======================================================

          var idsetd = charIDToTypeID( "setd" );

              var desc2 = new ActionDescriptor();

              var idnull = charIDToTypeID( "null" );

                  var ref1 = new ActionReference();

                  var idfsel = charIDToTypeID( "fsel" );

                  ref1.putProperty( idChnl, idfsel );

              desc2.putReference( idnull, ref1 );

              var idT = charIDToTypeID( "T   " );

                  var ref2 = new ActionReference();

                  var idTrsp = charIDToTypeID( "Trsp" );

                  ref2.putEnumerated( idChnl, idChnl, idTrsp );

              desc2.putReference( idT, ref2 );

          executeAction( idsetd, desc2, DialogModes.NO );

          // =======================================================

          var idIntr = charIDToTypeID( "Intr" );

              var desc3 = new ActionDescriptor();

              var idnull = charIDToTypeID( "null" );

                  var ref3 = new ActionReference();

                  var idMsk = charIDToTypeID( "Msk " );

                  ref3.putEnumerated( idChnl, idChnl, idMsk );

                  var idLyr = charIDToTypeID( "Lyr " );

                  ref3.putIdentifier( idLyr, layerID );

              desc3.putReference( idnull, ref3 );

              var idWith = charIDToTypeID( "With" );

                  var ref4 = new ActionReference();

                  var idfsel = charIDToTypeID( "fsel" );

                  ref4.putProperty( idChnl, idfsel );

              desc3.putReference( idWith, ref4 );

          executeAction( idIntr, desc3, DialogModes.NO );

          // =======================================================

          var idMk = charIDToTypeID( "Mk  " );

              var desc4 = new ActionDescriptor();

              var idNw = charIDToTypeID( "Nw  " );

              desc4.putClass( idNw, idChnl );

              var idAt = charIDToTypeID( "At  " );

                  var ref5 = new ActionReference();

                  var idMsk = charIDToTypeID( "Msk " );

                  ref5.putEnumerated( idChnl, idChnl, idMsk );

              desc4.putReference( idAt, ref5 );

              var idUsng = charIDToTypeID( "Usng" );

              var idUsrM = charIDToTypeID( "UsrM" );

              var idRvlS = charIDToTypeID( "RvlS" );

              desc4.putEnumerated( idUsng, idUsrM, idRvlS );

          executeAction( idMk, desc4, DialogModes.NO );

          };

          • 2. Re: Make Layers from slices or guides.
            MikeGondek Adobe Community Professional & MVP

            Wow! Almost perfect. Last column seems to get sliced. I even tried again with an extra guide and did the same.

             

            Screen Shot 2015-10-21 at 9.20.54 AM.png

            Screen Shot 2015-10-21 at 9.22.19 AM.png

             

            Here is the image incase you are able to test. Thank you for your time to this.

             

            http://ftp.kaleidoscopechicago.com/_u5QuwmbcyTgiLR

            FILENAME:   grapes.psd   

            26.7 MB

            The URL will expire on Nov 20.

            • 3. Re: Make Layers from slices or guides.
              c.pfaffenbichler Level 9

              Sorry, please change

              // sort and add beginning and end;

              theHor = treatGuideArray (theHor, app.activeDocument.width);

              theVer = treatGuideArray (theVer, app.activeDocument.height);

              to

              // sort and add beginning and end;

              theHor = treatGuideArray (theHor, app.activeDocument.height);

              theVer = treatGuideArray (theVer, app.activeDocument.width);

               

              Edit: I tested with a square image, so the effect was imperceptible.