Last active
August 29, 2015 14:02
-
-
Save joonaspaakko/09e8e2a218038e15344d to your computer and use it in GitHub Desktop.
Helps you save selected layer comps as a single psd file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Author: https://github.com/joonaspaakko | |
Gist: https://gist.github.com/joonaspaakko/09e8e2a218038e15344d | |
<javascriptresource> | |
<name>Menu=Selected Layer Comps to PSD...</name> | |
<category>layercomps</category> | |
</javascriptresource> | |
*/ | |
// enable double clicking from the Macintosh Finder or the Windows Explorer | |
#target photoshop | |
try { | |
var save, cancel, dlg, tempkeep; | |
// If documents exist, do stuff... | |
if ( app.documents.length > 0 ) main(); | |
function main() { | |
// Currently active document... | |
var doc = app.activeDocument; | |
// Document has been saved... | |
try { | |
var docPath = Folder( doc.fullName.parent ).fsName; | |
var docName = decodeURI( doc.fullName.name.substring( 0, app.activeDocument.fullName.name.indexOf(".") ) ); | |
} | |
// Document has not been saved... | |
catch( e ) { | |
var docPath = ""; | |
var docName = doc.name; | |
} | |
// THIS IS WHERE DECISIONS ARE MADE!?!?!?!?!? | |
dialog( doc, docName, docPath ); | |
if ( !cancel ) { | |
// Duplicate current document | |
var tempDoc = doc.duplicate(); | |
// Get layer comps | |
var layerComps = tempDoc.layerComps; | |
var shredder = []; | |
// Loop through each comp... | |
for ( i = 0; i < layerComps.length; i++ ) { | |
// Each looped comp | |
var comp = layerComps[ i ]; | |
// If comp is not selected... | |
if ( !comp.selected ) { | |
// ...push it to shredder | |
shredder.push( comp ); | |
} | |
} | |
// Loop through each shreddable comp... | |
for ( i = 0; i < shredder.length; i++ ) { | |
// Each looped comp | |
var comp = shredder[ i ]; | |
// Shred it | |
comp.remove(); | |
} | |
// Save temporary document as a psd file. | |
if ( save ) savePSD( doc, docName, docPath, tempDoc); | |
// Close temporary document. | |
tempDoc.close( SaveOptions.DONOTSAVECHANGES ); | |
// If user checks the checkbox "Keep new file open", | |
// this part of the code actually opens up the file again... | |
if ( dlg.export.tempkeep.value ) { | |
// Find the file we just saved... | |
var savedFile = new File( dlg.destination.input.text + '/' + dlg.filename.input.text + '.psd' ); | |
// ...open it | |
app.open( savedFile ); | |
} | |
} | |
} | |
} catch ( e ) {} | |
function dialog( doc, docName, docPath, tempDoc ) { | |
// Prepare dialog... | |
var dialog = "dialog { \ | |
text: 'Export selected layer comps as PSD', \ | |
destination: Panel { \ | |
alignment: 'left', \ | |
alignChildren:['left','top'], \ | |
orientation: 'row', \ | |
text: 'File destination', \ | |
input: EditText { text: '"+ docPath +"/', preferredSize: [230,20] }, \ | |
browse: Button { text: 'Browse...' }, \ | |
}, \ | |
filename: Panel { \ | |
alignment: 'left', \ | |
alignChildren:['left','top'], \ | |
orientation: 'row', \ | |
text: 'Filename', \ | |
input: EditText { text: '"+ docName +"', active: true, preferredSize: [320,20] }, \ | |
}, \ | |
export: Group { \ | |
alignment: 'right', \ | |
orientation: 'row', \ | |
tempkeep: Checkbox { text: 'Keep new file open', value: false }, \ | |
save: Button { text: 'Save', properties:{ name: 'ok' } }, \ | |
cancel: Button { text: 'Cancel' }, \ | |
} \ | |
}"; | |
// Make dialog | |
dlg = new Window( dialog ); | |
// Browse click event... | |
dlg.destination.browse.onClick = function() { | |
// Browse for destination | |
destination = Folder.selectDialog("Select destination", docPath ); | |
// If destination was selected above... | |
if ( destination != null ) { | |
// Update input path | |
dlg.destination.input.text = destination.fsName; | |
} | |
} | |
dlg.export.save.onClick = function() { | |
save = true; | |
dlg.close(); | |
} | |
dlg.export.cancel.onClick = function() { | |
cancel = true; | |
dlg.close(); | |
} | |
// Show dialog | |
dlg.show(); | |
} | |
function savePSD( doc, docName, docPath, tempDoc ) { | |
// Options for the psd file | |
var psd_Opt = new PhotoshopSaveOptions(); | |
psd_Opt.layers = true; // Keep layers | |
// Save active document to the selected destination | |
tempDoc.saveAs( File( dlg.destination.input.text + '/' + dlg.filename.input.text + '.psd' ), psd_Opt, true ); | |
app.beep(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment