Skip to main content
Mike_Gondek10189183
Community Expert
Community Expert
October 15, 2015
Answered

Make Layers from slices or guides.

  • October 15, 2015
  • 1 reply
  • 2302 views

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. 

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.

This topic has been closed for replies.
Correct answer c.pfaffenbichler

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.direction == Direction.HORIZONTAL) {theHor.push(myDocument.guides.coordinate)};

if (myDocument.guides.direction == Direction.VERTICAL) {theVer.push(myDocument.guides.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;

  var Y2 = theHor[y+1];

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

  try {

  var X1 = theVer;

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

};

1 reply

c.pfaffenbichler
Community Expert
c.pfaffenbichlerCommunity ExpertCorrect answer
Community Expert
October 21, 2015

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.direction == Direction.HORIZONTAL) {theHor.push(myDocument.guides.coordinate)};

if (myDocument.guides.direction == Direction.VERTICAL) {theVer.push(myDocument.guides.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;

  var Y2 = theHor[y+1];

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

  try {

  var X1 = theVer;

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

};

Mike_Gondek10189183
Community Expert
Community Expert
October 21, 2015

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

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.

c.pfaffenbichler
Community Expert
Community Expert
October 21, 2015

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.