Skip to main content
tokuredit
Inspiring
September 27, 2017
Answered

Select layers through color

  • September 27, 2017
  • 2 replies
  • 1380 views

Greetings everyone! How to select all red colored layers with jsx?

Thank you......

This topic has been closed for replies.
Correct answer SuperMerlin

#target photoshop;

app.bringToFront();

if(documents.length) main();

function main(){

var Layers = getColourLayers("red");

deselectLayers();

for(var z in Layers){

    selectLayerById(Number(Layers),true);

    }

};

function getColourLayers(Col){

   var ref = new ActionReference();

   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

   var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) +1;

   var Names=[];

try{

    activeDocument.backgroundLayer;

var i = 0; }catch(e){ var i = 1; };

   for(i;i<count;i++){

       if(i == 0) continue;

        ref = new ActionReference();

        ref.putIndex( charIDToTypeID( 'Lyr ' ), i );

        var desc = executeActionGet(ref);

        var layerName = desc.getString(charIDToTypeID( 'Nm  ' ));

        var Id = desc.getInteger(stringIDToTypeID( 'layerID' ));

        var Colour = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('color')));

        if(layerName.match(/^<\/Layer group/) ) continue;

        var layerType = typeIDToStringID(desc.getEnumerationValue( stringIDToTypeID( 'layerSection' )));

        var isLayerSet =( layerType == 'layerSectionContent') ? false:true;

        if(Colour == Col) Names.push(Id);

   };

return Names;

};

function deselectLayers() {

var desc01 = new ActionDescriptor();

var ref01 = new ActionReference();

ref01.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

desc01.putReference( charIDToTypeID('null'), ref01 );

executeAction( stringIDToTypeID('selectNoLayers'), desc01, DialogModes.NO );

};

function selectLayerById(id,add){

var ref = new ActionReference();

ref.putIdentifier(charIDToTypeID('Lyr '), id);

var desc = new ActionDescriptor();

desc.putReference(charIDToTypeID("null"), ref );

if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );

desc.putBoolean( charIDToTypeID( "MkVs" ), false );

try{

executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );

}catch(e){}

};

2 replies

Jarda Bereza
Inspiring
September 28, 2017

btw you can use filter by color in layer panel. But only for manual work. This filter can't be scripted.

pixxxelschubser
Community Expert
Community Expert
September 27, 2017
tokuredit
tokureditAuthor
Inspiring
September 27, 2017

Hi pixxxel schubser I had already tested this script ... it just checks if there is red color layer however, it is not able to select the same.

SuperMerlin
SuperMerlinCorrect answer
Inspiring
September 27, 2017

#target photoshop;

app.bringToFront();

if(documents.length) main();

function main(){

var Layers = getColourLayers("red");

deselectLayers();

for(var z in Layers){

    selectLayerById(Number(Layers),true);

    }

};

function getColourLayers(Col){

   var ref = new ActionReference();

   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

   var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) +1;

   var Names=[];

try{

    activeDocument.backgroundLayer;

var i = 0; }catch(e){ var i = 1; };

   for(i;i<count;i++){

       if(i == 0) continue;

        ref = new ActionReference();

        ref.putIndex( charIDToTypeID( 'Lyr ' ), i );

        var desc = executeActionGet(ref);

        var layerName = desc.getString(charIDToTypeID( 'Nm  ' ));

        var Id = desc.getInteger(stringIDToTypeID( 'layerID' ));

        var Colour = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('color')));

        if(layerName.match(/^<\/Layer group/) ) continue;

        var layerType = typeIDToStringID(desc.getEnumerationValue( stringIDToTypeID( 'layerSection' )));

        var isLayerSet =( layerType == 'layerSectionContent') ? false:true;

        if(Colour == Col) Names.push(Id);

   };

return Names;

};

function deselectLayers() {

var desc01 = new ActionDescriptor();

var ref01 = new ActionReference();

ref01.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

desc01.putReference( charIDToTypeID('null'), ref01 );

executeAction( stringIDToTypeID('selectNoLayers'), desc01, DialogModes.NO );

};

function selectLayerById(id,add){

var ref = new ActionReference();

ref.putIdentifier(charIDToTypeID('Lyr '), id);

var desc = new ActionDescriptor();

desc.putReference(charIDToTypeID("null"), ref );

if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );

desc.putBoolean( charIDToTypeID( "MkVs" ), false );

try{

executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );

}catch(e){}

};