public

Photoshop script that exports to PNG all layers and groups whose names end with ".png".

  • Download Gist
ps-export-layers-to-png.jsx
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
#target photoshop
// $.level = 2;
 
/*
* Script by Tomek Cejner (tomek (at) japko dot info)
* based on work of Damien van Holten:
* http://www.damienvanholten.com/blog/export-groups-to-files-photoshop/
*
* My version adds support of nested layer groups,
* and exports single layers in addition to groups.
*
*/
 
function main(){
if(!documents.length) return;
var doc = activeDocument;
var oldPath = activeDocument.path;
 
var outFolder = new Folder(oldPath + "/out");
if (!outFolder.exists) {
outFolder.create();
}
 
scanLayerSets(doc);
 
function scanLayerSets(el) {
// find layer groups
for(var a=0;a<el.layerSets.length;a++){
var lname = el.layerSets[a].name;
if (lname.substr(-4) == ".png") {
saveLayer(el.layers.getByName(lname), lname, oldPath, true);
} else {
// recursive
scanLayerSets(el.layerSets[a]);
}
}
 
// find plain layers in current group whose names end with .png
for(var j=0; j<el.artLayers.length; j++) {
var name = el.artLayers[j].name;
if (name.substr(-4) == ".png") {
saveLayer(el.layers.getByName(name), name, oldPath, false);
}
}
 
}
 
function saveLayer(layer, lname, path, shouldMerge) {
activeDocument.activeLayer = layer;
dupLayers();
if (shouldMerge === undefined || shouldMerge === true) {
activeDocument.mergeVisibleLayers();
}
activeDocument.trim(TrimType.TRANSPARENT,true,true,true,true);
var saveFile= File(path +"/out/"+lname);
SavePNG(saveFile);
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
 
};
 
main();
 
function dupLayers() {
var desc143 = new ActionDescriptor();
var ref73 = new ActionReference();
ref73.putClass( charIDToTypeID('Dcmn') );
desc143.putReference( charIDToTypeID('null'), ref73 );
desc143.putString( charIDToTypeID('Nm '), activeDocument.activeLayer.name );
var ref74 = new ActionReference();
ref74.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );
desc143.putReference( charIDToTypeID('Usng'), ref74 );
executeAction( charIDToTypeID('Mk '), desc143, DialogModes.NO );
};
 
function SavePNG(saveFile){
var pngOpts = new ExportOptionsSaveForWeb;
pngOpts.format = SaveDocumentType.PNG
pngOpts.PNG8 = false;
pngOpts.transparency = true;
pngOpts.interlaced = false;
pngOpts.quality = 100;
activeDocument.exportDocument(new File(saveFile),ExportType.SAVEFORWEB,pngOpts);
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.