#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