Scripting A file saving process

Community Beginner ,
May 25, 2022 May 25, 2022

Copy link to clipboard

Copied

Hello. So I am looking for script that...

Turns on the visibilty of a layer/group >

Saves it as a png(with the group name as the saved file name) >

Turns off the visibility of the layer and moves on to next.

 

Is this possible?

 

As for what it is for...I have 120 groups/layers after everything is arranged with a very specific name that helps the sorting process when they are in a folder. I have to do this 17 more times across the same amount of documents, so this automation script would be very much appreciated.

TOPICS
Actions and scripting , Windows

Views

100

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Adobe Community Professional , May 25, 2022 May 25, 2022
I have two versions of the same script in the following topic, one uses save and the other export save for web: https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-do-i-export-layers-as-png-without-loosing-the-size-and-placement-of-the-particular-layer/m-p/12729408 Modifications can be made as required.

Likes

Translate

Translate
Adobe Community Professional ,
May 25, 2022 May 25, 2022

Copy link to clipboard

Copied

I have two versions of the same script in the following topic, one uses save and the other export save for web:

 

https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-do-i-export-layers-as-png-without...

 

Modifications can be made as required.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
May 25, 2022 May 25, 2022

Copy link to clipboard

Copied

Thank You good sir, will take a look and get back to you

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
May 25, 2022 May 25, 2022

Copy link to clipboard

Copied

You are an OG sir, Thank You! This was exactly what I was looking for.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
May 25, 2022 May 25, 2022

Copy link to clipboard

Copied

Glad to be of help! For completeness, there is also the built-in script under File > Export > Layers to Files and you can also right-click on the layers in the layers panel and use Export As. The best method will depend on your requirements.

 

Edit: There are also a couple of scripts from Paul Riggott:

Layer Saver Plus.jsx

Layer Saver.jsx

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Jun 03, 2022 Jun 03, 2022

Copy link to clipboard

Copied

Hello Stephen, I appreciate the additional information. I havent tried out the scripts but I want to ask if  you know a way for the script to run a bit or rather, a lot faster? (It is taking 4 straight day and counting to export)

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Jun 03, 2022 Jun 03, 2022

Copy link to clipboard

Copied

If you are referring to the original two scripts that I linked to, the standard object model code to loop over all top-level layers could be changed to use action manager code, however, that is easier said than done (for me). Perhaps another scripter can help.

 

You could also see if changing the PNG quality options produces a faster save vs. quality.

 

If the process is taking too long, you should look to see if the two scripts from Paul Riggott are faster.

 

There is also the File > Export > Layers to Files script

 

Another option could be:

 

https://github.com/mechanicious/photoshopCompositionComposer

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Jun 04, 2022 Jun 04, 2022

Copy link to clipboard

Copied

You did it again my friend. The "Layer Saver Plus" really did the trick(although I had to find another script to turn all the groups into layers to use it, it was worth it.) as it saves several hundreds of pngs within an hour.  Thank You Again!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Jun 04, 2022 Jun 04, 2022

Copy link to clipboard

Copied

There is also an old Layer Set Saver script:

 

#target Photoshop  
app.bringToFront();  
  
  
main();  
function main(){  
if(!documents.length) return;  
Prefs ={};  
var UUID = 'f1742f10-a6de-11e2-9e96-0800200c9a66';  
try{  
var desc1 = app.getCustomOptions(UUID);  
Prefs = eval(desc1.getString(0));  
}catch(e){  
Prefs.Trim=false;  
Prefs.Merge=false;  
Prefs.OutFolder=app.activeDocument.path;  
Prefs.SaveOptions=0;  
Prefs.FileType=4;  
Prefs.TiffOptions =0;  
Prefs.Quality =79;  
Prefs.jpgQuality=7;  
}  
  
  
var selLayers = getSelectedLayersIdx();  
selectedLayers =new Array();  
selectedLayers = getNormalLayers(selLayers);  
var LayerSetLayers=[];  
var lSets = getLayerSets();  
for(var z in lSets){  
var lset = getChildIndex(Number(lSets[z]), true );  
LayerSetLayers[Number(lSets[z])] = lset;  
}  
var win = new Window( 'dialog', 'LayerSet Saver' );   
g = win.graphics;  
var myBrush = g.newBrush(g.BrushType.SOLID_COLOR, [0.2, 0.2, 0.2, 1]);  
g.backgroundColor = myBrush;  
win.orientation='stack';  
win.p1= win.add("panel", undefined, undefined, {borderStyle:"black"});   
win.g1 = win.p1.add('group');  
win.g1.orientation = "row";  
win.title = win.g1.add('statictext',undefined,'LayerSet Saver');  
win.title.alignment="fill";  
var g = win.title.graphics;  
g.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);  
win.g5 =win.p1.add('group');  
win.g5.orientation = "row";  
win.g5.alignment='fill';  
win.g5.spacing=10;  
win.g5.p1= win.g5.add("panel", undefined, 'Please Select LayerSets', {borderStyle:"black"});  
win.g5.p1.preferredSize=[250,200];  
win.g5.p1.lb1 = win.g5.p1.add('listbox', undefined, undefined, {multiselect: true} );  
win.g5.p1.lb1.preferredSize=[220,170];  
win.g5.p2= win.g5.add("panel", undefined, 'What to Do', {borderStyle:"black"});  
win.g5.p2.preferredSize=[250,200];  
for(var a in lSets){  
    win.g5.p1.lb1.add('item',(getLayerNameByIndex( Number(lSets[a]))));  
}  
win.g50 =win.g5.p2.add('group');  
win.g50.orientation = "column";  
win.g50.alignment='left';  
win.g50.alignChildren='left';  
win.g50.spacing=10;  
win.g50.rb1 = win.g50.add('radiobutton',undefined,'Save selected layers ('+selectedLayers.length + ')?');  
win.g50.rb2 = win.g50.add('radiobutton',undefined,'Save all layers in all LayerSets?');  
win.g50.rb3 = win.g50.add('radiobutton',undefined,'Save all layers in selected LayerSets?');  
win.g50.rb4 = win.g50.add('radiobutton',undefined,'Save selected LayerSets?');  
win.g50.rb5 = win.g50.add('radiobutton',undefined,'Save all LayerSets?');  
  
  
win.g50.rb1.value=true;  
win.g50.rb1.onClick=function(){  
    if(win.g50.rb1.value) {  
        win.g5.p1.lb1.enabled=false;  
        }else{  
            win.g5.p1.lb1.enabled=true;  
            }  
    }  
win.g50.rb1.onClick();  
win.g50.rb2.onClick=function(){  
    win.g50.rb1.onClick();  
    }  
win.g50.rb3.onClick=function(){  
    win.g50.rb1.onClick();  
    }  
win.g50.rb4.onClick=function(){  
    win.g50.rb1.onClick();  
    }  
win.g50.rb5.onClick=function(){  
    win.g50.rb1.onClick();  
    }  
var lSetsSelected=new Array();  
for(var f in lSets){  
    for(var t in selLayers){  
        if(Number(lSets[f]) == Number(selLayers[t])){  
            lSetsSelected.push(f);  
            }  
        }  
    }  
if(lSetsSelected.length > 0){  
    win.g5.p1.lb1.selection = lSetsSelected;  
    win.g50.rb4.value=true;  
    win.g50.rb1.onClick();  
    }  
win.g100 =win.p1.add('group');  
win.g100.alignment='row';  
win.g100.spacing=10;  
win.g100.p1 = win.g100.add("panel", undefined,'Output Options', {borderStyle:"black"});  
win.g100.p1.preferredSize=[520,40];  
win.g100a =win.g100.p1.add('group');  
win.g100a.alignment='fill';  
win.g100a.spacing=10;  
win.g100a.et1 = win.g100a.add('edittext');  
win.g100a.et1.preferredSize=[390,20];  
win.g100a.et1.enabled=false;  
//win.g100a.bu1 = win.g100a.add( 'image', undefined, 'SourceFolderIcon' );  
win.g100a.bu1 = win.g100a.add( 'button', undefined, 'Browse' );  
win.g100a.bu1.onClick=function(){  
try{  
    docPath = Prefs.OutFolder;  
    }catch(e){docPath= Folder("~");}  
outputFolder = Folder.selectDialog("Please select the output folder",docPath);  
if(outputFolder !=null){  
        Prefs.OutFolder=outputFolder;  
win.g100a.et1.text =  decodeURI(outputFolder.fsName);   
}  
}  
if(Folder(Prefs.OutFolder).exists){  
    outputFolder=Folder(Prefs.OutFolder);  
    win.g100a.et1.text =  decodeURI(outputFolder.fsName);   
    }  
win.g100b =win.g100.p1.add('group');  
win.g100b.alignment='fill';  
win.g100b.spacing=10;  
win.g100b.cb1 = win.g100b.add('checkbox',undefined,'Merge visible Layers?');  
win.g100b.cb2 = win.g100b.add('checkbox',undefined,'Trim Layer(s)?');  
win.g100b.cb2.value = Prefs.Trim;  
win.g100b.cb1.value = Prefs.Merge;  
win.g120 =win.g100.p1.add('group');  
win.g120.orientation = "row";  
win.g120.alignment='left';  
var Options= ["Layer Name","FileName + Sequence No.","FileName + Layer Name ","User Defined with Sequence No."];  
win.g120.st1 = win.g120.add('statictext',undefined,'Save Options');  
win.g120.dd1 = win.g120.add('dropdownlist',undefined,Options);  
win.g120.dd1.selection=Number(Prefs.SaveOptions);  
win.g120.et1 = win.g120.add('edittext');  
win.g120.et1.preferredSize=[150,20];  
win.g120.et1.hide();  
win.g120.dd1.onChange=function(){  
  if(this.selection.index==3){  
      win.g120.et1.show();  
      }else{  
          win.g120.et1.hide();  
          }  
    }  
win.g125 =win.g100.p1.add('group');  
win.g125.orientation = "row";  
win.g125.st1 = win.g125.add('statictext',undefined,'Save as :');  
var Types = ["PNG","PSD","PDF","TIF","JPG","JPG SFW"];  
win.g125.dd1 = win.g125.add('dropdownlist',undefined,Types);  
win.g125.dd1.selection = Number(Prefs.FileType);  
win.g125.alignment='left';  
  
  
win.g130 =win.g125.add('group');  
win.g130.orientation = "stack";  
  
  
win.g130b =win.g130.add('group');  
win.g130b.st1 = win.g130b.add('statictext',undefined,'Quality');  
win.g130b.dd1 = win.g130b.add('dropdownlist');  
for(var a =1;a<13;a++){  
    win.g130b.dd1.add('item',a);  
    }  
win.g130b.dd1.selection = Number(Prefs.jpgQuality);  
win.g130b.visible=false;  
  
  
win.g130c =win.g130.add('group');  
win.g130c.st1 = win.g130c.add('statictext',undefined,'Compression');  
var tiffOptions=["LZW","ZIP","JPG","None"];  
win.g130c.dd1 = win.g130c.add('dropdownlist',undefined,tiffOptions);  
win.g130c.dd1.selection = Prefs.TiffOptions;  
win.g130c.visible=false;  
  
  
win.g130d =win.g130.add('group');  
win.g130d.st1 = win.g130d.add('statictext',undefined,'Quality');  
win.g130d.dd1 = win.g130d.add('dropdownlist');  
for(var a =1;a<101;a++){  
    win.g130d.dd1.add('item',a);  
    }  
win.g130d.dd1.selection=Prefs.Quality;  
win.g130d.visible=false;  
win.g125.dd1.onChange=function(){  
    switch(Number(this.selection.index)){  
        case 0 : win.g130b.visible=false; win.g130c.visible=false; win.g130d.visible=false; break;  
        case 1 : win.g130b.visible=false; win.g130c.visible=false; win.g130d.visible=false; break;  
        case 2 : win.g130b.visible=false; win.g130c.visible=false; win.g130d.visible=false; break;  
        case 3 : win.g130b.visible=false; win.g130c.visible=true; win.g130d.visible=false; break;  
        case 4 : win.g130b.visible=true; win.g130c.visible=false; win.g130d.visible=false; break;  
        case 5 : win.g130b.visible=false; win.g130c.visible=false; win.g130d.visible=true; break;  
        default :break;  
        }  
}  
win.g125.dd1.onChange();  
win.g1000 =win.p1.add('group');  
win.g1000.alignment='row';  
win.g1000.spacing=10;  
win.g1000.p1 = win.g1000.add("panel", undefined, undefined, {borderStyle:"black"});  
win.g1000.p1.preferredSize=[520,40];  
win.g1000.p1.orientation = "row";  
win.g1000.p1.alignment='fill';  
win.g1000.p1.bu1 = win.g1000.p1.add('button',undefined,'Process');  
win.g1000.p1.bu1.preferredSize=[235,30];  
win.g1000.p1.bu2 = win.g1000.p1.add('button',undefined,'Cancel');  
win.g1000.p1.bu2.preferredSize=[235,30];  
function SaveDOC(saveFile){  
    switch(Number(win.g125.dd1.selection.index)){  
        case 0 : SavePNG(File(saveFile+".png")); break;  
        case 1:  SavePSD(File(saveFile+".psd")); break;  
        case 2:  SavePDF(File(saveFile+".pdf")); break;  
        case 3:  SaveTIFF(File(saveFile+".tif"),Number(win.g130c.dd1.selection.index)); break;  
        case 4:  SaveJPG(File(saveFile+".jpg"),Number(win.g130b.dd1.selection.index)+1); break;  
        case 5:  SaveForWeb(File(saveFile+".jpg"),Number(win.g130d.dd1.selection.index)+1)  break;  
        default : break;  
        }  
};  
function getName(seq,lName){  
lName = lName.replace(/\....$/,'');  
seq = zeroPad((Number(seq)+1), 3);  
 var dName = decodeURI(activeDocument.name).replace(/\.[^\.]+$/, '');  
var Name ='';  
switch (Number(win.g120.dd1.selection.index)){  
    case 0: Name += lName; break;  
    case 1: Name += dName +"-"+seq; break;  
    case 2: Name += dName +"-"+ lName; break;  
    case 3: Name += win.g120.et1.text + "-"+seq; break;  
    default :break;  
    }  
return Name;  
}  
     
win.g1000.p1.bu1.onClick=function(){  
if(win.g100a.et1.text == ''){  
    alert("No output folder has been selected!");  
    return;  
        }  
if(!outputFolder.exists){  
    alert("Output folder does not exist!");  
    return;  
    }  
Prefs.Merge = win.g100b.cb1.value;  
Prefs.Trim = win.g100b.cb2.value;  
Prefs.SaveOptions=win.g120.dd1.selection.index;  
Prefs.FileType = win.g125.dd1.selection.index;  
Prefs.TiffOptions = win.g130c.dd1.selection.index;  
Prefs.Quality = win.g130d.dd1.selection.index;  
Prefs.jpgQuality=win.g130b.dd1.selection.index;  
var desc2 = new ActionDescriptor();  
desc2.putString(0, Prefs.toSource());   
app.putCustomOptions(UUID, desc2, true );  
win.close(0);  
if(win.g50.rb1.value){//Save selected layers  
for(var a in selectedLayers){  
var lName = getLayerNameByIndex( Number(selectedLayers[a])).toString().replace(/[:\/\\*\?\"\<\>\|]/g, "_");  
var saveFile= File(outputFolder+ "/" + getName(a,lName));  
selectLayerByIndex(Number(selectedLayers[a]));  
dupLayers();  
if(win.g100b.value)  try{activeDocument.mergeVisibleLayers();}catch(e){}  
if(win.g100b.cb2.value){  
try{   
activeDocument.backgroundLayer;   
var back = true;  
}catch(e){var back =false;}  
    if(!back){  
        try{activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);}catch(e){}  
        }else{  
            try{activeDocument.trim(TrimType.TOPLEFT,true,true,true,true);}catch(e){}  
            }  
    }  
SaveDOC(saveFile);  
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);  
    }//end selected layers  
    };  
if(win.g50.rb2.value){//Save all layers in all LayerSets  
var count =0;  
for(var a in lSets){  
    var layerToProcess = LayerSetLayers[Number(lSets[a])];  
    var selectedLay = getNormalLayers(layerToProcess);  
for(var b in selectedLay){  
var lName = getLayerNameByIndex( Number(selectedLay[b])).toString().replace(/[:\/\\*\?\"\<\>\|]/g, "_");  
var saveFile= File(outputFolder+ "/" + getName(count,lName));  
selectLayerByIndex(Number(selectedLay[b]));  
dupLayers();  
if(win.g100b.value)  try{activeDocument.mergeVisibleLayers();}catch(e){}  
if(win.g100b.cb2.value){  
try{   
activeDocument.backgroundLayer;   
var back = true;  
}catch(e){var back =false;}  
    if(!back){  
        try{activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);}catch(e){}  
        }else{  
            try{activeDocument.trim(TrimType.TOPLEFT,true,true,true,true);}catch(e){}  
            }  
    }  
SaveDOC(saveFile);  
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);  
count++;  
    }//end selectedlay  
    }  
    };//end Save all layers in all LayerSets  
if(win.g50.rb3.value){//Save all layers in selected LayerSets  
var lSets2 = new Array();  
var selGroups = win.g5.p1.lb1.selection;  
for(var g in  selGroups){ lSets2.push(Number(lSets[Number(selGroups[g])]));}  
var count =0;  
for(var a in lSets2){  
    var layerToProcess = LayerSetLayers[Number(lSets2[a])];  
    var selectedLay = getNormalLayers(layerToProcess);  
for(var b in selectedLay){  
var lName = getLayerNameByIndex( Number(selectedLay[b])).toString().replace(/[:\/\\*\?\"\<\>\|]/g, "_");  
var saveFile= File(outputFolder+ "/" + getName(count,lName));  
selectLayerByIndex(Number(selectedLay[b]));  
dupLayers();  
if(win.g100b.value)  try{activeDocument.mergeVisibleLayers();}catch(e){}  
if(win.g100b.cb2.value){  
try{   
activeDocument.backgroundLayer;   
var back = true;  
}catch(e){var back =false;}  
    if(!back){  
        try{activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);}catch(e){}  
        }else{  
            try{activeDocument.trim(TrimType.TOPLEFT,true,true,true,true);}catch(e){}  
            }  
    }  
SaveDOC(saveFile);  
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);  
count++;  
    }//end selectedlay  
    }  
    };//end Save all layers in selected LayerSets  
if(win.g50.rb4.value){//Save selected LayerSets  
var lSets2 = new Array();  
var selGroups = win.g5.p1.lb1.selection;  
for(var g in  selGroups){ lSets2.push(Number(lSets[Number(selGroups[g].index)]));}  
var count =0;  
for(var a in lSets2){  
var lName = getLayerNameByIndex( Number(lSets2[a])).toString().replace(/[:\/\\*\?\"\<\>\|]/g, "_");  
var saveFile= File(outputFolder+ "/" + getName(count,lName));  
selectLayerByIndex(Number(lSets2[a]));  
dupLayers();  
if(win.g100b.value)  try{activeDocument.mergeVisibleLayers();}catch(e){}  
if(win.g100b.cb2.value){  
try{   
activeDocument.backgroundLayer;   
var back = true;  
}catch(e){var back =false;}  
    if(!back){  
        try{activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);}catch(e){}  
        }else{  
            try{activeDocument.trim(TrimType.TOPLEFT,true,true,true,true);}catch(e){}  
            }  
    }  
SaveDOC(saveFile);  
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);  
count++;  
    }//end lSets2  
    };//end Save  selected LayerSets  
if(win.g50.rb5.value){//Save all LayerSets  
var count =0;  
for(var a in lSets){  
var lName = getLayerNameByIndex( Number(lSets[a])).toString().replace(/[:\/\\*\?\"\<\>\|]/g, "_");  
var saveFile= File(outputFolder+ "/" + getName(count,lName));  
selectLayerByIndex(Number(lSets[a]));  
dupLayers();  
if(win.g100b.value)  try{activeDocument.mergeVisibleLayers();}catch(e){}  
if(win.g100b.cb2.value){  
try{   
activeDocument.backgroundLayer;   
var back = true;  
}catch(e){var back =false;}  
    if(!back){  
        try{activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);}catch(e){}  
        }else{  
            try{activeDocument.trim(TrimType.TOPLEFT,true,true,true,true);}catch(e){}  
            }  
    }  
SaveDOC(saveFile);  
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);  
count++;  
    }//end lSets  
    };//end Save all LayerSets  
};  
win.show();  
};  
//Functions  
function isLayerSet(idx){  
var ref = new ActionReference();   
ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID( 'layerSection' ));   
ref.putIndex( charIDToTypeID( "Lyr " ), idx);  
var desc = executeActionGet(ref);  
var isSet = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('layerSection')));  
var LayerSet=false;  
switch (isSet.toString()){  
    case 'layerSectionStart' : LayerSet=true; break;  
    case 'layerSectionEnd' : LayerSet=true; break;  
    case 'layerSectionConent' : LayerSet=false; break;  
    }  
return LayerSet;  
};  
function selectLayerByIndex(index,add,vis){   
add = (add == undefined)  ? add = false : add;  
    if (vis == undefined) vis = false;  
 var ref = new ActionReference();  
    ref.putIndex(charIDToTypeID("Lyr "), index);  
    var desc = new ActionDescriptor();  
    desc.putReference(charIDToTypeID("null"), ref );  
      if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );   
      desc.putBoolean( charIDToTypeID( "MkVs" ), vis );   
  try{  
    executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );  
}catch(e){}  
};  
function noOfLayers(){  
   var ref = new ActionReference();   
   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );   
   return executeActionGet(ref).getInteger(charIDToTypeID('NmbL'));  
}  
function getLayerSets(){   
   var ref = new ActionReference();   
   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );   
   var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) +1;   
   var Lsets=[];  
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  ' ));  
        if(layerName.match(/^<\/Layer group/) ) continue;  
        var layerType = typeIDToStringID(desc.getEnumerationValue( stringIDToTypeID( 'layerSection' )));  
        var isLayerSet =( layerType == 'layerSectionContent') ? false:true;  
        if(isLayerSet) Lsets.push(i);  
   };   
return Lsets;  
};  
function getLayerLayerSectionByIndex( index ) {     
   var ref = new ActionReference();   
   ref.putIndex(charIDToTypeID('Lyr '), index);  
   return typeIDToStringID(executeActionGet(ref).getEnumerationValue(stringIDToTypeID('layerSection')));  
};   
function getLayerNameByIndex( index ) {   
    var ref = new ActionReference();   
    ref.putIndex( charIDToTypeID( 'Lyr ' ), index );  
    return executeActionGet(ref).getString(charIDToTypeID( 'Nm  ' ));  
};  
function skipNestedSets( layerIndex ){  
   var isEnd = false;  
   layerIndex = app.activeDocument.layers[app.activeDocument.layers.length-1].isBackgroundLayer ? layerIndex-2:layerIndex;  
   while(!isEnd){  
      layerIndex--;  
      if( getLayerLayerSectionByIndex( layerIndex ) == 'layerSectionStart' ) layerIndex = skipNestedSets( layerIndex );  
      isEnd = getLayerNameByIndex(layerIndex) == '</Layer group>' ? true:false;  
   }  
   return layerIndex-1;  
};  
function getChildIndex(idx, skipNested ){  
   var layerSetIndex = idx;  
   var isEndOfSet = false;  
   var layerIndexArray = [];  
   while(!isEndOfSet){  
      layerSetIndex--;  
      if( getLayerLayerSectionByIndex( layerSetIndex ) == 'layerSectionStart' && skipNested ){  
         layerSetIndex = skipNestedSets( layerSetIndex );  
      }  
  if(getLayerLayerSectionByIndex( layerSetIndex ) == undefined) break;  
      isEndOfSet = getLayerNameByIndex(layerSetIndex) == '</Layer group>' ? true:false;  
     if(!isEndOfSet ) layerIndexArray.push( layerSetIndex );  
   }  
   return layerIndexArray;  
};  
function selectLayerByIndex(index,add){   
add = (add == undefined)  ? add = false : add;  
 var ref = new ActionReference();  
    ref.putIndex(charIDToTypeID('Lyr '), index);  
    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){}  
};  
function getIDXs(){   
   var ref = new ActionReference();   
   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );   
   var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) +1;   
   var IDX=[];  
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' ));  
        if(layerName.match(/^<\/Layer group/) ) continue;  
        var layerType = typeIDToStringID(desc.getEnumerationValue( stringIDToTypeID( 'layerSection' )));  
        var isLayerSet =( layerType == 'layerSectionContent') ? false:true;  
        if(!isLayerSet) IDX.push(i);  
   };   
return IDX;  
};  
function getSelectedLayersIdx(){   
      var selectedLayers = new Array;   
      var ref = new ActionReference();   
      ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );   
      var desc = executeActionGet(ref);   
      if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){   
         desc = desc.getList( stringIDToTypeID( 'targetLayers' ));   
          var c = desc.count   
          var selectedLayers = new Array();   
          for(var i=0;i<c;i++){   
            try{   
               activeDocument.backgroundLayer;   
               selectedLayers.push(  desc.getReference( i ).getIndex() );   
            }catch(e){   
               selectedLayers.push(  desc.getReference( i ).getIndex()+1 );   
            }   
          }   
       }else{   
         var ref = new ActionReference();   
         ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));   
         ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );   
         try{   
            activeDocument.backgroundLayer;   
            selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);   
         }catch(e){   
            selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));   
         }   
     var vis = app.activeDocument.activeLayer.visible;  
        if(vis == true) app.activeDocument.activeLayer.visible = false;  
        var desc9 = new ActionDescriptor();  
    var list9 = new ActionList();  
    var ref9 = new ActionReference();  
    ref9.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );  
    list9.putReference( ref9 );  
    desc9.putList( charIDToTypeID('null'), list9 );  
    executeAction( charIDToTypeID('Shw '), desc9, DialogModes.NO );  
    if(app.activeDocument.activeLayer.visible == false) selectedLayers.shift();  
        app.activeDocument.activeLayer.visible = vis;  
      }   
      return selectedLayers;   
};  
function dupLayers() {  
var desc = new ActionDescriptor();  
var ref = new ActionReference();  
ref.putClass( charIDToTypeID('Dcmn') );  
desc.putReference( charIDToTypeID('null'), ref );  
desc.putString( charIDToTypeID('Nm  '), "Dup" );  
var ref2 = new ActionReference();  
ref2.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );  
desc.putReference( charIDToTypeID('Usng'), ref2 );  
executeAction( charIDToTypeID('Mk  '), desc, DialogModes.NO );  
};  
function getLayerKindByIndex( index ) {  
    var ref, desc, adjustmentDesc, layerSectionType;  
   ref = new ActionReference();  
   ref.putIndex(charIDToTypeID( "Lyr " ), index );  
   desc =  executeActionGet(ref);  
   if( desc.hasKey( stringIDToTypeID( 'textKey' ) ) ) return LayerKind.TEXT;  
   if( desc.hasKey( stringIDToTypeID( 'smartObject' ) ) ) return LayerKind.SMARTOBJECT;// includes LayerKind.VIDEO  
   if( desc.hasKey( stringIDToTypeID( 'layer3D' ) ) ) return LayerKind.LAYER3D;  
   if( desc.hasKey( stringIDToTypeID( 'adjustment' ) ) ){  
      switch(typeIDToStringID(desc.getList (stringIDToTypeID('adjustment')).getClass (0))){  
      case 'photoFilter' : return LayerKind.PHOTOFILTER;  
      case 'solidColorLayer' : return LayerKind.SOLIDFILL;  
      case 'gradientMapClass' : return LayerKind.GRADIENTMAP;  
      case 'gradientMapLayer' : return LayerKind.GRADIENTFILL;  
      case 'hueSaturation' : return LayerKind.HUESATURATION;  
      case 'colorLookup' : return undefined; //this does not exist and errors with getting layer kind  
      case 'colorBalance' : return LayerKind.COLORBALANCE;  
      case 'patternLayer' : return LayerKind.PATTERNFILL;  
      case 'invert' : return LayerKind.INVERSION;  
      case 'posterization' : return LayerKind.POSTERIZE;  
      case 'thresholdClassEvent' : return LayerKind.THRESHOLD;  
      case 'blackAndWhite' : return LayerKind.BLACKANDWHITE;  
      case 'selectiveColor' : return LayerKind.SELECTIVECOLOR;  
      case 'vibrance' : return LayerKind.VIBRANCE;  
      case 'brightnessEvent' : return LayerKind.BRIGHTNESSCONTRAST;  
      case  'channelMixer' : return LayerKind.CHANNELMIXER;  
      case 'curves' : return LayerKind.CURVES;  
      case 'exposure' : return LayerKind.EXPOSURE;  
      // if not one of the above adjustments return - adjustment layer type  
      default : return typeIDToStringID(desc.getList (stringIDToTypeID('adjustment')).getClass (0));  
      }  
   }  
var layerType = typeIDToStringID(desc.getEnumerationValue( stringIDToTypeID( 'layerSection' )));  
return ( layerType == 'layerSectionContent') ? LayerKind.NORMAL:undefined;  
};  
function getNormalLayers(array){  
var selectedLayers = new Array();  
for(var t in array){    
   switch(getLayerKindByIndex( Number(array[t])) ){  
       case LayerKind.NORMAL :   
       case  LayerKind.SMARTOBJECT :  
       case LayerKind.SOLIDFILL :  
       case LayerKind.TEXT : selectedLayers.push(Number(array[t])); break;  
       default : break;  
       }  
    }  
return selectedLayers;  
}  
function zeroPad(n, s) {   
   n = n.toString();   
   while (n.length < s)  n = '0' + n;   
   return n;   
};  
function SavePNG(saveFile){  
    pngSaveOptions = new PNGSaveOptions();   
activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);   
};  
function SaveTIFF(saveFile,Comp){  
tiffSaveOptions = new TiffSaveOptions();   
tiffSaveOptions.embedColorProfile = true;   
tiffSaveOptions.transparency = true;   
tiffSaveOptions.alphaChannels = true;   
tiffSaveOptions.layers = true;  
switch (Number(Comp)){  
    case 0 : tiffSaveOptions.imageCompression = TIFFEncoding.TIFFLZW; break;  
    case 1 : tiffSaveOptions.imageCompression = TIFFEncoding.TIFFZIP; break;  
    case 2 : tiffSaveOptions.imageCompression = TIFFEncoding.JPEG; break;  
    case 3 : tiffSaveOptions.imageCompression = TIFFEncoding.NONE; break;  
    default : break;  
}  
activeDocument.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);   
};  
function SavePSD(saveFile){   
psdSaveOptions = new PhotoshopSaveOptions();   
psdSaveOptions.embedColorProfile = true;   
psdSaveOptions.alphaChannels = true;    
psdSaveOptions.layers = true;    
activeDocument.saveAs(saveFile, psdSaveOptions, true, Extension.LOWERCASE);   
};  
function SavePDF(saveFile){   
pdfSaveOptions = new PDFSaveOptions();   
activeDocument.saveAs(saveFile, pdfSaveOptions, true, Extension.LOWERCASE);   
};  
function SaveJPG(saveFile, jpegQuality){  
    try{  
jpgSaveOptions = new JPEGSaveOptions();  
jpgSaveOptions.embedColorProfile = true;  
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;  
jpgSaveOptions.matte = MatteType.NONE;  
jpgSaveOptions.quality = jpegQuality;  
activeDocument.saveAs(saveFile, jpgSaveOptions, true,Extension.LOWERCASE);  
}catch(e){$.writeln(e+" - "+e.line);}  
};  
function SaveForWeb(saveFile,jpegQuality) {  
var tmpFile=File(saveFile.path +"/tmpName.jpg");  
var sfwOptions = new ExportOptionsSaveForWeb();   
   sfwOptions.format = SaveDocumentType.JPEG;   
   sfwOptions.includeProfile = false;   
   sfwOptions.interlaced = 0;   
   sfwOptions.optimized = true;   
   sfwOptions.quality = Number(jpegQuality);   
activeDocument.exportDocument(tmpFile, ExportType.SAVEFORWEB, sfwOptions);  
tmpFile.rename(decodeURI(saveFile.name));  
}; 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Jun 04, 2022 Jun 04, 2022

Copy link to clipboard

Copied

Ohh, I spotted the word "group" in the code- I'll try it out when I get to the next batch of pngs. But thanks again man you have single handedly turned the task from a massively mind numbing, time wasting task to a breeze.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Jun 04, 2022 Jun 04, 2022

Copy link to clipboard

Copied

LATEST

A layer set is the same thing as a layer group. Adobe changed the name/term in the software interface, however, scripting still uses the legacy term set and not group.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines