I am using CS6. When exporting layers to files in Scripts, I get an error message Error 519: Server

I am using CS6. When exporting layers to files in Scripts, I get an error message Error 519: Server Interface error. 'No component returned from CreateWidget'

Hi. You’ve posted your question in a forum that is for beginners trying to learn the basics of Photoshop.  I'm moving your question to the Photoshop General Discussion forum for specialized attention to your situation.

Similar Messages

  • How to avoid double extension *jpg.tif when exporting layers to files?

    Please help, I checked all the topics related and it seems nobody bothers about this issue.
    When I do a Photomerge of a series of jpg files, Photoshop builds a multilayered file - but preserves in the name of each layer *.jpg 
    When I want now to export layers to files, the Scripting function will do the dumb thing and export each file with the original name - ending in JPG - , plus the extension required by me - for ex tif.
    It does the same if I chose to export as jpg files and puts double extension again < *.JPG.jpg> at the end of each file exported from a layer.
    I looked everywhere and couldn't find a way to solve this behavior, which forces me to do batch renames in Bridge.
    The next program where I need the files (After Effects) doesn't want to import these files with double extensions.
    Has anyone encountered this issue and what can be done to avoid these double extensions at Scripts/Export layers to files?
    Thanks for the answer

    I have just altered my script so that it will remove the extentions if found.
    http://www.scriptsrus.talktalk.net/Layer%20Saver.htm
    Also it would be better to use :-
    var layerName = activeDocument.activeLayer.name.replace(/\....$/,'');
    As this way it doesn't arbitory remove the last four characters, only if it finds a fullstop.

  • Weird numbers when Exporting Layers to Files / Layer Comps to Files

    Hi there,
    File > Scripts > Export Layers to Files ...
    File > Scripts >  Layer Comps to Files ...
    File > Scripts >  Layer Comps to PDF ...
    File > Scripts >  Layer Comps to WPG ...
    After I use each of these Scripts , even if I specify "File Name Prefix:", in the name of the exported files I see strange nomeration. This is pretty confusing , because each time I have to rename the files to remove these numbers.
    Adobe please remove the numbers prefix that these Scipts adds..
    Thanks!
    Regards,
    SK

    Hi. You’ve posted your question in a forum that is for beginners trying to learn the basics of Photoshop.  I'm moving your question to the Photoshop General Discussion forum for specialized attention to your situation.

  • Export Layers To Files - Renaming Script PS CC

    On all previous versions of Photoshop, including CS6 (before the recent update to PS CC), I was able to use the ExtendScript Toolkit to edit the PS preset script that adds naming/numbering sequences to files when running the "Export Layers to Files" script. For PS CS 6, I edited the script to remove the automatic naming/numbering of exported layers by editing the following in ExtendScript Toolkit:
    In ExtendScript Toolkit CS6 open the Export Layers to Files.jsx (applications/adobe photoshop cs6/presets/scripts/export layers to files.jsx)
    on line 1030:
    change:
    fileNameBody += "_" + zeroSuppress(i, 4);
    to:
    //fileNameBody += "_" + zeroSuppress(i, 4);
    on line 1031:
    change:
    fileNameBody += "_" + layerName;
    to:
    fileNameBody += "" + layerName;
    This solved my problem and allowed PS to export my layers to files, keeping the layer name as the filename without adding any naming or numbering sequences to the filename. However with the recent release of Photoshop CC, the script change above does not work. It looks as though there are some new lines of scripting with Photoshop CC and I would love to know what else I need to change to prevent PS CC from renaming files when using the Export Layers to File script. Without the ability to change this, I will have to go through numerous steps in bath rename in Bridge, which when working with 100's of files with different naming structures would totally slow down my workflow. Any ideas on what to update in the Photoshop CC Script to fix this? Thanks so very much!

    Welcome to the forum.
    You would maybe be better served asking in the PhotoShop Scripting Forum
    http://forums.adobe.com/community/photoshop/photoshop_scripting
    Or even here:
    http://www.ps-scripts.com/bb/index.php
    In general, I think there were changes across the board with the scripting in CC that broke things in PS, IL, ID, etc. I have seen it in both the Illustrator and InDesign scripting forums, previous scripts no longer work as before or are broken, features removed, etc. Sad but true.

  • Export Layers to Files includes an additional layer in each file

    I'm using the CS4 Export Layers to Files (to PNG with transparency), and with this particular PSD, there's one layer that gets exported on its own, and then it's included in each of the other layers when they're exported.  If I run it a second time but exclude that layer from the selection, then the next layer up is the one that's exported on its own and then included with all of the other exports.  It seems to be failing to make that layer invisible again after it's been exported. 
    I've managed to run this over 4 PSD files and they all worked perfectly.  I've tried another since this problem started happening, and it, too, does the same thing.
    Any ideas?  The script hasn't been modded.

    I have modified the original script to include some functionality in another I found online, and the problem has gone away.  I guess it was in a part of the code that was made optional.  So, while I still don't know what caused the problem, the mods have made it stop happening.

  • CS5 Photoshop Scripts Error: Export Layers to Files...

    Hey Folks,
    I'm banging my head against the wall trying to figure out why I can't use the script: Export Layers to Files...
    I am recieving this error messages in my attempt:
    I have ran the Adobe updater and made sure everything is current.
    I restarted my magic toster twice after the update.
    I even tried a basic psd with 2 layers in an effort to determine if it was the working psd file itself... No luck.
    So I am convinced now that there may be a bug.
    Does anyone have any insight or workarounds for this solution?
    Thank you all in advance.
    John

    Jeffrey,
    Thanks for your response.
    It's the original script that shipped stock with CS5.
    Get this...
    I switched from 32 bit mode back into 64 and restarted the program.
    Opened my psd and tried again...
    No error this time, but this is what I get:
    Nothing!
    So racked on this one dude...

  • Using Premiere Pro CS3 When exporting as flash file poor picture quality

    I'm using Premiere Pro CS3. I shoot green screen in HDV and work in 1440 x 1080. I have been capturing files in Premiere and sending them to Serious Magic Ulta 2. I use this program for keying and adding virtual backgrounds. I save these files as avi. with a resolution of 1440 X 1080. I then bring them back into Premiere Pro for final edit. When I export these video's encoded as mpeg2 theyplay very clear. I am now trying to export as flv. with alpha channel background and the resolution is poor. I working on the transparent background with walk on spokespersons that overlay the HTML page. When In try to play them on my computer the adobe media player is what comes up. I have downloaded flash player but it doesn't select it to play the video. I'm running windows Vista Business platform. What am I doing wrong.

    Thanks for the reply.
    The capture and editing have already been done in 1440 X 1080. Should I use this resolution rather than trying to bump it up to 1920 X 1080.
    Thanks
    Bill Bennett
    Date: Fri, 2 Sep 2011 07:33:04 -0600
    From: [email protected]
    To: [email protected]
    Subject: Using Premiere Pro CS3 When exporting as flash file poor picture quality
    Computer playback generally prefers square pixels.  Make sure to set your output resolution to 1920 x 1080 using a Pixel Aspect Ratio (PAR) of 1.0 or Square.
    See if that helps.
    >

  • Selecting "Use Previews" when exporting?

    Hello, everyone. Can someone please explain to me the benefit of choosing "Use Previews" when exporting? Does it increase the quality of the final render? If so, what are the comparative values of additional time versus additional quality? Thanks, Brum

    Theoretically, it will decrease the quality, as what this command is specifying is that the exporter should use the files you already rendered in Premiere. Depending on the preview codec that is used, you will be recompressing a file that has already been recompressed. The benefit is that the export will be faster, because the video frames don't have to be processed before going to the final compression. Of course, this is sort of a wash, as you have to account for the time that preview rendering ate up.
    For quick exports where you might have already rendered a timeline (like for a quick one-off to send to a client), you can tick the Use Previews box, but my feeling is that in real world practice, you typically don't want to use this.

  • Export layers to file script error in Photoshop CC

    I need help with an issue.  I also asked this in the general forum but was refered here to ask all of you amazingly talented scripting geniuses.
    My issue is with the Export Layers script that comes installed with Photoshop.  I am running Windows 7 64bit - using photoshop version: creative cloud 64bit.
    When i try to run File>Scripts> Export Layers to files I get this error
    Error 22: Windows does not have a constructor. Line: 239 -> dlgMain = new Window ("dialog", strTitle); 
    When i load Photoshop Creative Cloud 32 bit i get a different error message when trying to run the script. 
    Error - 33: Internal error . line:395 ->  dligMain.pnlFileType.pnlOptions.grpJPGOptions = ...
    I can't run the image processor script I also get an error with that. 
    This  is an issue for me as i use this script on a daily basis.  It worked in PSCS6  
    I upgraded, i dont' want to have to load an older  version of photoshop to do this task  
    Thanks
    Carrie 

    I'm afraid no ideas...
    These kind of errors appeared to me too (Mac, CS5/CS6). If memory doesn't fail me - and there were tricks to be applied in your own scripts to workaround the problem - the issue was due to a stack of commands involving Document change (say: switch from document A to document B and then activate the layer X): what happened was that the script's call "activate the layer X" was too quick - i.e. it happened before Photoshop could actually perform the switch. As a result the "activate the Layer X" was executed on the A document instead of the B document and the whole thing broke.
    Mind you, it's just an example I've made up.
    Tab view for some reason worked as expected.
    I would suggest to try with no other documents open, resetting the preferences (launch PS pressing CRTL+ALT+SHIFT) - but this is quite generic, as a recommendation.
    Davide

  • How batch export layers to files png in cc

    I am having trouble with an export layers to files script i am wanting to batch export layer to png and this script i have seems to be the one i want although every time i run the script i get this error message "could not complete the action  since the destination folder doesn't exist" the script required me to hard code my destination path the path i require is "C:/Users/Tim/Desktop/Backdrops/png/" I am not completely sure why its stating it does not exist any help would be greatly appreciated. i have tried to contact the creator but the post it was on was very old.
    // enable double clicking from the Macintosh Finder or the Windows Explorer
    #target photoshop
    //=================================================================
    // Globals
    //=================================================================
    var exportPath = "/Users/pedr/Documents/Work/Clients/Pathways/Learning_Hub/Source/Comics/export";
    exportPath = exportPath + '/layers';
    // UI strings to be localized
    var strTitle = localize("$$$/JavaScripts/X2L/Title=X2L");
    var strButtonRun = localize("$$$/JavaScripts/X2L/Run=Run");
    var strButtonCancel = localize("$$$/JavaScripts/X2L/Cancel=Cancel");
    var strHelpText = localize("$$$/JavaScripts/X2L/Help=Please specify the format and location for saving each layer as a file.");
    var strLabelDestination = localize("$$$/JavaScripts/X2L/Destination=Destination:");
    var strButtonBrowse = localize("$$$/JavaScripts/X2L/Browse=&Browse...");
    var strLabelFileNamePrefix = localize("$$$/JavaScripts/X2L/FileNamePrefix=File Name Prefix:");
    var strCheckboxVisibleOnly = localize("$$$/JavaScripts/X2L/VisibleOnly=&Visible Layers Only");
    var strLabelFileType = localize("$$$/JavaScripts/X2L/FileType=File Type:");
    var strCheckboxIncludeICCProfile = localize("$$$/JavaScripts/X2L/IncludeICC=&Include ICC Profile");
    var strJPEGOptions = localize("$$$/JavaScripts/X2L/JPEGOptions=JPEG Options:");
    var strLabelQuality = localize("$$$/JavaScripts/X2L/Quality=Quality:");
    var strCheckboxMaximizeCompatibility = localize("$$$/JavaScripts/X2L/Maximize=&Maximize Compatibility");
    var strTIFFOptions = localize("$$$/JavaScripts/X2L/TIFFOptions=TIFF Options:");
    var strLabelImageCompression = localize("$$$/JavaScripts/X2L/ImageCompression=Image Compression:");
    var strNone = localize("$$$/JavaScripts/X2L/None=None");
    var strPDFOptions = localize("$$$/JavaScripts/X2L/PDFOptions=PDF Options:");
    var strLabelEncoding = localize("$$$/JavaScripts/X2L/Encoding=Encoding:");
    var strTargaOptions = localize("$$$/JavaScripts/X2L/TargaOptions=Targa Options:");
    var strLabelDepth = localize("$$$/JavaScripts/X2L/Depth=Depth:");
    var strRadiobutton16bit = localize("$$$/JavaScripts/X2L/Bit16=16bit");
    var strRadiobutton24bit = localize("$$$/JavaScripts/X2L/Bit24=24bit");
    var strRadiobutton32bit = localize("$$$/JavaScripts/X2L/Bit32=32bit");
    var strBMPOptions = localize("$$$/JavaScripts/X2L/BMPOptions=BMP Options:");
    var strAlertSpecifyDestination = localize("$$$/JavaScripts/X2L/SpecifyDestination=Please specify destination.");
    var strAlertDestinationNotExist = localize("$$$/JavaScripts/X2L/DestionationDoesNotExist=Destination does not exist.");
    var strTitleSelectDestination = localize("$$$/JavaScripts/X2L/SelectDestination=Select Destination");
    var strAlertDocumentMustBeOpened = localize("$$$/JavaScripts/X2L/OneDocument=You must have a document open to export!");
    var strAlertNeedMultipleLayers = localize("$$$/JavaScripts/X2L/NoLayers=You need a document with multiple layers to export!");
    var strAlertWasSuccessful = localize("$$$/JavaScripts/X2L/Success= was successful.");
    var strUnexpectedError = localize("$$$/JavaScripts/X2L/Unexpected=Unexpected error");
    var strMessage = localize("$$$/JavaScripts/X2L/Message=X2L");
    var stretQuality = localize( "$$$/locale_specific/JavaScripts/X2L/ETQualityLength=30" );
    var stretDestination = localize( "$$$/locale_specific/JavaScripts/X2L/ETDestinationLength=160" );
    var strddFileType = localize( "$$$/locale_specific/JavaScripts/X2L/DDFileType=100" );
    var strpnlOptions = localize( "$$$/locale_specific/JavaScripts/X2L/PNLOptions=100" );
    var strPNG8Options = localize("$$$/JavaScripts/X2L/PNG8Options=PNG-8 Options:");
    var strCheckboxPNGTransparency = localize("$$$/JavaScripts/X2L/Transparency=Transparency");
    var strCheckboxPNGInterlaced = localize("$$$/JavaScripts/X2L/Interlaced=Interlaced");
    var strCheckboxPNGTrm = localize("$$$/JavaScripts/X2L/Trim=Trim Layers");
    var strPNG24Options = localize("$$$/JavaScripts/X2L/PNG24Options=PNG-24 Options:");
    // the drop down list indexes for file type
    var png24Index = 7;
    main();
    // Functions
    // Function: main
    // Usage: the core routine for this script
    // Input: <none>
    // Return: <none>
    function main() {
        if ( app.documents.length <= 0 ) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert( strAlertDocumentMustBeOpened );
            return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
        var exportInfo = new Object();
        initExportInfo(exportInfo);
        // look for last used params via Photoshop registry, getCustomOptions will throw if none exist
        try {
        catch(e) {
            // it's ok if we don't have any options, continue with defaults
        try {
            var docName = app.activeDocument.name;  // save the app.activeDocument name before duplicate.
            var layerCount = app.documents[docName].layers.length;
            var layerSetsCount = app.documents[docName].layerSets.length;
            if ((layerCount <= 1)&&(layerSetsCount <= 0)) {
                if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                    alert( strAlertNeedMultipleLayers );
                return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
            } else {
                var rememberMaximize;
                var needMaximize = exportInfo.psdMaxComp ? QueryStateType.ALWAYS : QueryStateType.NEVER;
                app.activeDocument = app.documents[docName];
                var duppedDocument = app.activeDocument.duplicate();
                duppedDocument.activeLayer = duppedDocument.layers[duppedDocument.layers.length-1]; // for removing
                setInvisibleAllArtLayers(duppedDocument);
                exportChildren(duppedDocument, app.documents[docName], exportInfo, duppedDocument, exportInfo.fileNamePrefix);
                duppedDocument.close( SaveOptions.DONOTSAVECHANGES );
                if ( rememberMaximize != undefined ) {
                    app.preferences.maximizeCompatibility = rememberMaximize;
                if ( DialogModes.ALL == app.playbackDisplayDialogs ) {
                    //alert(strTitle + strAlertWasSuccessful);
                app.playbackDisplayDialogs = DialogModes.ALL;
        } catch (e) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert(e);
            return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
    // Function: settingDialog
    // Usage: pop the ui and get user settings
    // Input: exportInfo object containing our parameters
    // Return: on ok, the dialog info is set to the exportInfo object
    function settingDialog(exportInfo) {
      return;
    // Function: hideAllFileTypePanel
    // Usage: hide all the panels in the common actions
    // Input: <none>, dlgMain is a global for this script
    // Return: <none>, all panels are now hidden
    function hideAllFileTypePanel() {
    // Function: initExportInfo
    // Usage: create our default parameters
    // Input: a new Object
    // Return: a new object with params set to default
    function initExportInfo(exportInfo) {
        //exportInfo.destination = new String(exportPath);
        exportInfo.fileNamePrefix = new String("untitled_");
        exportInfo.visibleOnly = false;
        exportInfo.fileType = png24Index;
        exportInfo.icc = true;
        exportInfo.png24Transparency = true;
        exportInfo.png24Interlaced = false;
        exportInfo.png24Trim = true;
        try {
            exportInfo.destination = Folder(new String(exportPath)).fsName; // destination folder
            var tmp = app.activeDocument.fullName.name;
            exportInfo.fileNamePrefix = decodeURI(tmp.substring(0, tmp.indexOf("."))); // filename body part
        } catch(someError) {
            exportInfo.destination = new String(exportPath);
            exportInfo.fileNamePrefix = app.activeDocument.name; // filename body part
    // Function: saveFile
    // Usage: the worker routine, take our params and save the file accordingly
    // Input: reference to the document, the name of the output file,
    //        export info object containing more information
    // Return: <none>, a file on disk
    function saveFile( docRef, fileNameBody, exportInfo) {
                saveFile(docRef, fileNameBody, exportInfo, false, true);
                function saveFile( docRef, fileNameBody, exportInfo, interlacedValue, transparencyValue) {
                var id6 = charIDToTypeID( "Expr" );
                    var desc3 = new ActionDescriptor();
                    var id7 = charIDToTypeID( "Usng" );
                        var desc4 = new ActionDescriptor();
                        var id8 = charIDToTypeID( "Op  " );
                        var id9 = charIDToTypeID( "SWOp" );
                        var id10 = charIDToTypeID( "OpSa" );
                        desc4.putEnumerated( id8, id9, id10 );
                        var id11 = charIDToTypeID( "Fmt " );
                        var id12 = charIDToTypeID( "IRFm" );
                        var id13 = charIDToTypeID( "PN24" );
                        desc4.putEnumerated( id11, id12, id13 );
                        var id14 = charIDToTypeID( "Intr" );
                        desc4.putBoolean( id14, interlacedValue );
                        var id15 = charIDToTypeID( "Trns" );
                        desc4.putBoolean( id15, transparencyValue );
                        var id16 = charIDToTypeID( "Mtt " );
                        desc4.putBoolean( id16, true );
                        var id17 = charIDToTypeID( "MttR" );
                        desc4.putInteger( id17, 255 );
                        var id18 = charIDToTypeID( "MttG" );
                        desc4.putInteger( id18, 255 );
                        var id19 = charIDToTypeID( "MttB" );
                        desc4.putInteger( id19, 255 );
                        var id20 = charIDToTypeID( "SHTM" );
                        desc4.putBoolean( id20, false );
                        var id21 = charIDToTypeID( "SImg" );
                        desc4.putBoolean( id21, true );
                        var id22 = charIDToTypeID( "SSSO" );
                        desc4.putBoolean( id22, false );
                        var id23 = charIDToTypeID( "SSLt" );
                            var list1 = new ActionList();
                        desc4.putList( id23, list1 );
                        var id24 = charIDToTypeID( "DIDr" );
                        desc4.putBoolean( id24, false );
                        var id25 = charIDToTypeID( "In  " );
                        desc4.putPath( id25, new File( exportPath + "C:/Users/Tim/Desktop/Backdrops/png/"  + fileNameBody + ".png") );
                    var id26 = stringIDToTypeID( "SaveForWeb" );
                    desc3.putObject( id7, id26, desc4 );
                executeAction( id6, desc3, DialogModes.NO );
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function zeroSuppress (num, digit) {
        var tmp = num.toString();
        while (tmp.length < digit) {
            tmp = "0" + tmp;
        return tmp;
    // Function: setInvisibleAllArtLayers
    // Usage: unlock and make invisible all art layers, recursively
    // Input: document or layerset
    // Return: all art layers are unlocked and invisible
    function setInvisibleAllArtLayers(obj) {
        for( var i = 0; i < obj.artLayers.length; i++) {
            obj.artLayers[i].allLocked = false;
            obj.artLayers[i].visible = false;
        for( var i = 0; i < obj.layerSets.length; i++) {
            setInvisibleAllArtLayers(obj.layerSets[i]);
    // Function: removeAllInvisibleArtLayers
    // Usage: remove all the invisible art layers, recursively
    // Input: document or layer set
    // Return: <none>, all layers that were invisible are now gone
    function removeAllInvisibleArtLayers(obj) {
        for( var i = obj.artLayers.length-1; 0 <= i; i--) {
            try {
                if(!obj.artLayers[i].visible) {
                    obj.artLayers[i].remove();
            catch (e) {
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            removeAllInvisibleArtLayers(obj.layerSets[i]);
    // Function: removeAllEmptyLayerSets
    // Usage: find all empty layer sets and remove them, recursively
    // Input: document or layer set
    // Return: empty layer sets are now gone
    function removeAllEmptyLayerSets(obj) {
        var foundEmpty = true;
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            if( removeAllEmptyLayerSets(obj.layerSets[i])) {
                obj.layerSets[i].remove();
            } else {
                foundEmpty = false;
        if (obj.artLayers.length > 0) {
            foundEmpty = false;
        return foundEmpty;
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function removeAllInvisible(docRef) {
        removeAllInvisibleArtLayers(docRef);
        removeAllEmptyLayerSets(docRef);
    // Function: exportChildren
    // Usage: find all the children in this document to save
    // Input: duplicate document, original document, export info,
    //        reference to document, starting file name
    // Return: <none>, documents are saved accordingly
    function exportChildren(dupObj, orgObj, exportInfo, dupDocRef, fileNamePrefix) {
        for( var i = 0; i < dupObj.artLayers.length; i++) {
            if (exportInfo.visibleOnly) { // visible layer only
                if (!orgObj.artLayers[i].visible) {
                    continue;
            dupObj.artLayers[i].visible = true;
            var layerName = dupObj.artLayers[i].name;  // store layer name before change doc
            var duppedDocumentTmp = dupDocRef.duplicate();
            if ((png24Index == exportInfo.fileType)||(png8Index == exportInfo.fileType)) { // PSD: Keep transparency
                removeAllInvisible(duppedDocumentTmp);
                //PNGFileOptions
                        if (activeDocument.activeLayer.isBackgroundLayer == false) { //is it anything but a background layer?
                            app.activeDocument.trim(TrimType.TRANSPARENT);
            } else { // just flatten
                duppedDocumentTmp.flatten();
            // Edit
            var docName = app.activeDocument.name;
            // For some reason indexOf fails if we include the '-', so we use 'copy' and decrement the index by 1.
            docName = docName.slice(0, docName.indexOf('copy')-1);
            var fileNameBody = (docName+'_'+layerName).toLowerCase();
            fileNameBody = fileNameBody.replace(/[:\/\\*\?\"\<\>\|]/g, "_");  // '/\:*?"<>|' -> '_'
            if (fileNameBody.length > 120) {
                fileNameBody = fileNameBody.substring(0,120);
            saveFile(duppedDocumentTmp, fileNameBody, exportInfo);
            duppedDocumentTmp.close(SaveOptions.DONOTSAVECHANGES);
            dupObj.artLayers[i].visible = false;
        for( var i = 0; i < dupObj.layerSets.length; i++) {
            if (exportInfo.visibleOnly) { // visible layer only
                if (!orgObj.layerSets[i].visible) {
                    continue;
            var fileNameBody = fileNamePrefix;
            fileNameBody += "_" + zeroSuppress(i, 4) + "s";
            exportChildren(dupObj.layerSets[i], orgObj.layerSets[i], exportInfo, dupDocRef, fileNameBody);  // recursive call
    // Function: objectToDescriptor
    // Usage: create an ActionDescriptor from a JavaScript Object
    // Input: JavaScript Object (o)
    //        object unique string (s)
    //        Pre process converter (f)
    // Return: ActionDescriptor
    // NOTE: Only boolean, string, number and UnitValue are supported, use a pre processor
    //       to convert (f) other types to one of these forms.
    // REUSE: This routine is used in other scripts. Please update those if you
    //        modify. I am not using include or eval statements as I want these
    //        scripts self contained.
    function objectToDescriptor (o, s, f) {
        o = {};
        var d = new ActionDescriptor;
        var l = o.reflect.properties.length;
        d.putString( app.charIDToTypeID( 'Msge' ), s );
        for (var i = 0; i < l; i++ ) {
            var k = o.reflect.properties[i].toString();
            if (k == "__proto__" || k == "__count__" || k == "__class__" || k == "reflect")
                continue;
            var v = o[ k ];
            k = app.stringIDToTypeID(k);
            switch ( typeof(v) ) {
                case "boolean":
                    d.putBoolean(k, v);
                    break;
                case "string":
                    d.putString(k, v);
                    break;
                case "number":
                    d.putDouble(k, v);
                    break;
                default:
                    if ( v instanceof UnitValue ) {
                        var uc = new Object;
                        uc["px"] = charIDToTypeID("#Rlt"); // unitDistance
                        uc["%"] = charIDToTypeID("#Prc"); // unitPercent
                        d.putUnitDouble(k, uc[v.type], v.value);
                    } else {
                        throw( new Error("Unsupported type in objectToDescriptor " + typeof(v) ) );
        return d;
    // Function: descriptorToObject
    // Usage: update a JavaScript Object from an ActionDescriptor
    // Input: JavaScript Object (o), current object to update (output)
    //        Photoshop ActionDescriptor (d), descriptor to pull new params for object from
    //        object unique string (s)
    //        JavaScript Function (f), post process converter utility to convert
    // Return: Nothing, update is applied to passed in JavaScript Object (o)
    // NOTE: Only boolean, string, number and UnitValue are supported, use a post processor
    //       to convert (f) other types to one of these forms.
    // REUSE: This routine is used in other scripts. Please update those if you
    //        modify. I am not using include or eval statements as I want these
    //        scripts self contained.
    function descriptorToObject (o, d, s, f) {
        var l = d.count;
        if (l) {
            var keyMessage = app.charIDToTypeID( 'Msge' );
            if ( d.hasKey(keyMessage) && ( s != d.getString(keyMessage) )) return;
        for (var i = 0; i < l; i++ ) {
            var k = d.getKey(i); // i + 1 ?
            var t = d.getType(k);
            strk = app.typeIDToStringID(k);
            switch (t) {
                case DescValueType.BOOLEANTYPE:
                    o[strk] = d.getBoolean(k);
                    break;
                case DescValueType.STRINGTYPE:
                    o[strk] = d.getString(k);
                    break;
                case DescValueType.DOUBLETYPE:
                    o[strk] = d.getDouble(k);
                    break;
                case DescValueType.UNITDOUBLE:
                    var uc = new Object;
                    uc[charIDToTypeID("#Rlt")] = "px"; // unitDistance
                    uc[charIDToTypeID("#Prc")] = "%"; // unitPercent
                    uc[charIDToTypeID("#Pxl")] = "px"; // unitPixels
                    var ut = d.getUnitDoubleType(k);
                    var uv = d.getUnitDoubleValue(k);
                    o[strk] = new UnitValue( uv, uc[ut] );
                    break;
                case DescValueType.INTEGERTYPE:
                case DescValueType.ALIASTYPE:
                case DescValueType.CLASSTYPE:
                case DescValueType.ENUMERATEDTYPE:
                case DescValueType.LISTTYPE:
                case DescValueType.OBJECTTYPE:
                case DescValueType.RAWTYPE:
                case DescValueType.REFERENCETYPE:
                default:
                    throw( new Error("Unsupported type in descriptorToObject " + t ) );
        if (undefined != f) {
            o = f(o);
    // Function: preProcessExportInfo
    // Usage: convert Photoshop enums to strings for storage
    // Input: JavaScript Object of my params for this script
    // Return: JavaScript Object with objects converted for storage
    function preProcessExportInfo(o) {
        o.tiffCompression = o.tiffCompression.toString();
        o.pdfEncoding = o.pdfEncoding.toString();
        o.targaDepth = o.targaDepth.toString();
        o.bmpDepth = o.bmpDepth.toString();
        return o;
    // Function: postProcessExportInfo
    // Usage: convert strings from storage to Photoshop enums
    // Input: JavaScript Object of my params in string form
    // Return: JavaScript Object with objects in enum form
    function postProcessExportInfo(o) {
        o.tiffCompression = eval(o.tiffCompression);
        o.pdfEncoding = eval(o.pdfEncoding);
        o.targaDepth = eval(o.targaDepth);
        o.bmpDepth = eval(o.bmpDepth);
        return o;
    // Function: StrToIntWithDefault
    // Usage: convert a string to a number, first stripping all characters
    // Input: string and a default number
    // Return: a number
    function StrToIntWithDefault( s, n ) {
        var onlyNumbers = /[^0-9]/g;
        var t = s.replace( onlyNumbers, "" );
        t = parseInt( t );
        if ( ! isNaN( t ) ) {
            n = t;
        return n;
    // End X2L.jsx

    I have put the like var exportPath = "~/Desktop/Backdrops/png/";  and have removed the exportPath = exportPath + '/layers';
    but when i run the script it still comes up with the error
    could not complete action since the destination folder does not exist
    if you are using the extendedscript toolkit would be able to run the script and see if you know were the problem is coming from i cant seem to understand why its not seeing the destination.
    thanks for all your help
    // enable double clicking from the Macintosh Finder or the Windows Explorer
    #target photoshop
    //=================================================================
    // Globals
    //=================================================================
    var exportPath = "~/Desktop/Backdrops/png/";
    // UI strings to be localized
    var strTitle = localize("$$$/JavaScripts/X2L/Title=X2L");
    var strButtonRun = localize("$$$/JavaScripts/X2L/Run=Run");
    var strButtonCancel = localize("$$$/JavaScripts/X2L/Cancel=Cancel");
    var strHelpText = localize("$$$/JavaScripts/X2L/Help=Please specify the format and location for saving each layer as a file.");
    var strLabelDestination = localize("$$$/JavaScripts/X2L/Destination=Destination:");
    var strButtonBrowse = localize("$$$/JavaScripts/X2L/Browse=&Browse...");
    var strLabelFileNamePrefix = localize("$$$/JavaScripts/X2L/FileNamePrefix=File Name Prefix:");
    var strCheckboxVisibleOnly = localize("$$$/JavaScripts/X2L/VisibleOnly=&Visible Layers Only");
    var strLabelFileType = localize("$$$/JavaScripts/X2L/FileType=File Type:");
    var strCheckboxIncludeICCProfile = localize("$$$/JavaScripts/X2L/IncludeICC=&Include ICC Profile");
    var strJPEGOptions = localize("$$$/JavaScripts/X2L/JPEGOptions=JPEG Options:");
    var strLabelQuality = localize("$$$/JavaScripts/X2L/Quality=Quality:");
    var strCheckboxMaximizeCompatibility = localize("$$$/JavaScripts/X2L/Maximize=&Maximize Compatibility");
    var strTIFFOptions = localize("$$$/JavaScripts/X2L/TIFFOptions=TIFF Options:");
    var strLabelImageCompression = localize("$$$/JavaScripts/X2L/ImageCompression=Image Compression:");
    var strNone = localize("$$$/JavaScripts/X2L/None=None");
    var strPDFOptions = localize("$$$/JavaScripts/X2L/PDFOptions=PDF Options:");
    var strLabelEncoding = localize("$$$/JavaScripts/X2L/Encoding=Encoding:");
    var strTargaOptions = localize("$$$/JavaScripts/X2L/TargaOptions=Targa Options:");
    var strLabelDepth = localize("$$$/JavaScripts/X2L/Depth=Depth:");
    var strRadiobutton16bit = localize("$$$/JavaScripts/X2L/Bit16=16bit");
    var strRadiobutton24bit = localize("$$$/JavaScripts/X2L/Bit24=24bit");
    var strRadiobutton32bit = localize("$$$/JavaScripts/X2L/Bit32=32bit");
    var strBMPOptions = localize("$$$/JavaScripts/X2L/BMPOptions=BMP Options:");
    var strAlertSpecifyDestination = localize("$$$/JavaScripts/X2L/SpecifyDestination=Please specify destination.");
    var strAlertDestinationNotExist = localize("$$$/JavaScripts/X2L/DestionationDoesNotExist=Destination does not exist.");
    var strTitleSelectDestination = localize("$$$/JavaScripts/X2L/SelectDestination=Select Destination");
    var strAlertDocumentMustBeOpened = localize("$$$/JavaScripts/X2L/OneDocument=You must have a document open to export!");
    var strAlertNeedMultipleLayers = localize("$$$/JavaScripts/X2L/NoLayers=You need a document with multiple layers to export!");
    var strAlertWasSuccessful = localize("$$$/JavaScripts/X2L/Success= was successful.");
    var strUnexpectedError = localize("$$$/JavaScripts/X2L/Unexpected=Unexpected error");
    var strMessage = localize("$$$/JavaScripts/X2L/Message=X2L");
    var stretQuality = localize( "$$$/locale_specific/JavaScripts/X2L/ETQualityLength=30" );
    var stretDestination = localize( "$$$/locale_specific/JavaScripts/X2L/ETDestinationLength=160" );
    var strddFileType = localize( "$$$/locale_specific/JavaScripts/X2L/DDFileType=100" );
    var strpnlOptions = localize( "$$$/locale_specific/JavaScripts/X2L/PNLOptions=100" );
    var strPNG8Options = localize("$$$/JavaScripts/X2L/PNG8Options=PNG-8 Options:");
    var strCheckboxPNGTransparency = localize("$$$/JavaScripts/X2L/Transparency=Transparency");
    var strCheckboxPNGInterlaced = localize("$$$/JavaScripts/X2L/Interlaced=Interlaced");
    var strCheckboxPNGTrm = localize("$$$/JavaScripts/X2L/Trim=Trim Layers");
    var strPNG24Options = localize("$$$/JavaScripts/X2L/PNG24Options=PNG-24 Options:");
    // the drop down list indexes for file type
    var png24Index = 7;
    main();
    // Functions
    // Function: main
    // Usage: the core routine for this script
    // Input: <none>
    // Return: <none>
    function main() {
        if ( app.documents.length <= 0 ) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert( strAlertDocumentMustBeOpened );
            return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
        var exportInfo = new Object();
        initExportInfo(exportInfo);
        // look for last used params via Photoshop registry, getCustomOptions will throw if none exist
        try {
        catch(e) {
            // it's ok if we don't have any options, continue with defaults
        try {
            var docName = app.activeDocument.name;  // save the app.activeDocument name before duplicate.
            var layerCount = app.documents[docName].layers.length;
            var layerSetsCount = app.documents[docName].layerSets.length;
            if ((layerCount <= 1)&&(layerSetsCount <= 0)) {
                if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                    alert( strAlertNeedMultipleLayers );
                return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
            } else {
                var rememberMaximize;
                var needMaximize = exportInfo.psdMaxComp ? QueryStateType.ALWAYS : QueryStateType.NEVER;
                app.activeDocument = app.documents[docName];
                var duppedDocument = app.activeDocument.duplicate();
                duppedDocument.activeLayer = duppedDocument.layers[duppedDocument.layers.length-1]; // for removing
                setInvisibleAllArtLayers(duppedDocument);
                exportChildren(duppedDocument, app.documents[docName], exportInfo, duppedDocument, exportInfo.fileNamePrefix);
                duppedDocument.close( SaveOptions.DONOTSAVECHANGES );
                if ( rememberMaximize != undefined ) {
                    app.preferences.maximizeCompatibility = rememberMaximize;
                if ( DialogModes.ALL == app.playbackDisplayDialogs ) {
                    //alert(strTitle + strAlertWasSuccessful);
                app.playbackDisplayDialogs = DialogModes.ALL;
        } catch (e) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert(e);
            return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
    // Function: settingDialog
    // Usage: pop the ui and get user settings
    // Input: exportInfo object containing our parameters
    // Return: on ok, the dialog info is set to the exportInfo object
    function settingDialog(exportInfo) {
      return;
    // Function: hideAllFileTypePanel
    // Usage: hide all the panels in the common actions
    // Input: <none>, dlgMain is a global for this script
    // Return: <none>, all panels are now hidden
    function hideAllFileTypePanel() {
    // Function: initExportInfo
    // Usage: create our default parameters
    // Input: a new Object
    // Return: a new object with params set to default
    function initExportInfo(exportInfo) {
        //exportInfo.destination = new String(exportPath);
        exportInfo.fileNamePrefix = new String("untitled_");
        exportInfo.visibleOnly = false;
        exportInfo.fileType = png24Index;
        exportInfo.icc = true;
        exportInfo.png24Transparency = true;
        exportInfo.png24Interlaced = false;
        exportInfo.png24Trim = true;
        try {
            exportInfo.destination = Folder(new String(exportPath)).fsName; // destination folder
            var tmp = app.activeDocument.fullName.name;
            exportInfo.fileNamePrefix = decodeURI(tmp.substring(0, tmp.indexOf("."))); // filename body part
        } catch(someError) {
            exportInfo.destination = new String(exportPath);
            exportInfo.fileNamePrefix = app.activeDocument.name; // filename body part
    // Function: saveFile
    // Usage: the worker routine, take our params and save the file accordingly
    // Input: reference to the document, the name of the output file,
    //        export info object containing more information
    // Return: <none>, a file on disk
    function saveFile( docRef, fileNameBody, exportInfo) {
                saveFile(docRef, fileNameBody, exportInfo, false, true);
                function saveFile( docRef, fileNameBody, exportInfo, interlacedValue, transparencyValue) {
                var id6 = charIDToTypeID( "Expr" );
                    var desc3 = new ActionDescriptor();
                    var id7 = charIDToTypeID( "Usng" );
                        var desc4 = new ActionDescriptor();
                        var id8 = charIDToTypeID( "Op  " );
                        var id9 = charIDToTypeID( "SWOp" );
                        var id10 = charIDToTypeID( "OpSa" );
                        desc4.putEnumerated( id8, id9, id10 );
                        var id11 = charIDToTypeID( "Fmt " );
                        var id12 = charIDToTypeID( "IRFm" );
                        var id13 = charIDToTypeID( "PN24" );
                        desc4.putEnumerated( id11, id12, id13 );
                        var id14 = charIDToTypeID( "Intr" );
                        desc4.putBoolean( id14, interlacedValue );
                        var id15 = charIDToTypeID( "Trns" );
                        desc4.putBoolean( id15, transparencyValue );
                        var id16 = charIDToTypeID( "Mtt " );
                        desc4.putBoolean( id16, true );
                        var id17 = charIDToTypeID( "MttR" );
                        desc4.putInteger( id17, 255 );
                        var id18 = charIDToTypeID( "MttG" );
                        desc4.putInteger( id18, 255 );
                        var id19 = charIDToTypeID( "MttB" );
                        desc4.putInteger( id19, 255 );
                        var id20 = charIDToTypeID( "SHTM" );
                        desc4.putBoolean( id20, false );
                        var id21 = charIDToTypeID( "SImg" );
                        desc4.putBoolean( id21, true );
                        var id22 = charIDToTypeID( "SSSO" );
                        desc4.putBoolean( id22, false );
                        var id23 = charIDToTypeID( "SSLt" );
                            var list1 = new ActionList();
                        desc4.putList( id23, list1 );
                        var id24 = charIDToTypeID( "DIDr" );
                        desc4.putBoolean( id24, false );
                        var id25 = charIDToTypeID( "In  " );
                        desc4.putPath( id25, new File( exportPath + "C:/Users/Tim/Desktop/Backdrops/png/"  + fileNameBody + ".png") );
                    var id26 = stringIDToTypeID( "SaveForWeb" );
                    desc3.putObject( id7, id26, desc4 );
                executeAction( id6, desc3, DialogModes.NO );
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function zeroSuppress (num, digit) {
        var tmp = num.toString();
        while (tmp.length < digit) {
            tmp = "0" + tmp;
        return tmp;
    // Function: setInvisibleAllArtLayers
    // Usage: unlock and make invisible all art layers, recursively
    // Input: document or layerset
    // Return: all art layers are unlocked and invisible
    function setInvisibleAllArtLayers(obj) {
        for( var i = 0; i < obj.artLayers.length; i++) {
            obj.artLayers[i].allLocked = false;
            obj.artLayers[i].visible = false;
        for( var i = 0; i < obj.layerSets.length; i++) {
            setInvisibleAllArtLayers(obj.layerSets[i]);
    // Function: removeAllInvisibleArtLayers
    // Usage: remove all the invisible art layers, recursively
    // Input: document or layer set
    // Return: <none>, all layers that were invisible are now gone
    function removeAllInvisibleArtLayers(obj) {
        for( var i = obj.artLayers.length-1; 0 <= i; i--) {
            try {
                if(!obj.artLayers[i].visible) {
                    obj.artLayers[i].remove();
            catch (e) {
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            removeAllInvisibleArtLayers(obj.layerSets[i]);
    // Function: removeAllEmptyLayerSets
    // Usage: find all empty layer sets and remove them, recursively
    // Input: document or layer set
    // Return: empty layer sets are now gone
    function removeAllEmptyLayerSets(obj) {
        var foundEmpty = true;
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            if( removeAllEmptyLayerSets(obj.layerSets[i])) {
                obj.layerSets[i].remove();
            } else {
                foundEmpty = false;
        if (obj.artLayers.length > 0) {
            foundEmpty = false;
        return foundEmpty;
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function removeAllInvisible(docRef) {
        removeAllInvisibleArtLayers(docRef);
        removeAllEmptyLayerSets(docRef);
    // Function: exportChildren
    // Usage: find all the children in this document to save
    // Input: duplicate document, original document, export info,
    //        reference to document, starting file name
    // Return: <none>, documents are saved accordingly
    function exportChildren(dupObj, orgObj, exportInfo, dupDocRef, fileNamePrefix) {
        for( var i = 0; i < dupObj.artLayers.length; i++) {
            if (exportInfo.visibleOnly) { // visible layer only
                if (!orgObj.artLayers[i].visible) {
                    continue;
            dupObj.artLayers[i].visible = true;
            var layerName = dupObj.artLayers[i].name;  // store layer name before change doc
            var duppedDocumentTmp = dupDocRef.duplicate();
            if ((png24Index == exportInfo.fileType)||(png8Index == exportInfo.fileType)) { // PSD: Keep transparency
                removeAllInvisible(duppedDocumentTmp);
                //PNGFileOptions
                        if (activeDocument.activeLayer.isBackgroundLayer == false) { //is it anything but a background layer?
                            app.activeDocument.trim(TrimType.TRANSPARENT);
            } else { // just flatten
                duppedDocumentTmp.flatten();
            // Edit
            var docName = app.activeDocument.name;
            // For some reason indexOf fails if we include the '-', so we use 'copy' and decrement the index by 1.
            docName = docName.slice(0, docName.indexOf('copy')-1);
            var fileNameBody = (docName+'_'+layerName).toLowerCase();
            fileNameBody = fileNameBody.replace(/[:\/\\*\?\"\<\>\|]/g, "_");  // '/\:*?"<>|' -> '_'
            if (fileNameBody.length > 120) {
                fileNameBody = fileNameBody.substring(0,120);
            saveFile(duppedDocumentTmp, fileNameBody, exportInfo);
            duppedDocumentTmp.close(SaveOptions.DONOTSAVECHANGES);
            dupObj.artLayers[i].visible = false;
        for( var i = 0; i < dupObj.layerSets.length; i++) {
            if (exportInfo.visibleOnly) { // visible layer only
                if (!orgObj.layerSets[i].visible) {
                    continue;
            var fileNameBody = fileNamePrefix;
            fileNameBody += "_" + zeroSuppress(i, 4) + "s";
            exportChildren(dupObj.layerSets[i], orgObj.layerSets[i], exportInfo, dupDocRef, fileNameBody);  // recursive call
    // Function: objectToDescriptor
    // Usage: create an ActionDescriptor from a JavaScript Object
    // Input: JavaScript Object (o)
    //        object unique string (s)
    //        Pre process converter (f)
    // Return: ActionDescriptor
    // NOTE: Only boolean, string, number and UnitValue are supported, use a pre processor
    //       to convert (f) other types to one of these forms.
    // REUSE: This routine is used in other scripts. Please update those if you
    //        modify. I am not using include or eval statements as I want these
    //        scripts self contained.
    function objectToDescriptor (o, s, f) {
        o = {};
        var d = new ActionDescriptor;
        var l = o.reflect.properties.length;
        d.putString( app.charIDToTypeID( 'Msge' ), s );
        for (var i = 0; i < l; i++ ) {
            var k = o.reflect.properties[i].toString();
            if (k == "__proto__" || k == "__count__" || k == "__class__" || k == "reflect")
                continue;
            var v = o[ k ];
            k = app.stringIDToTypeID(k);
            switch ( typeof(v) ) {
                case "boolean":
                    d.putBoolean(k, v);
                    break;
                case "string":
                    d.putString(k, v);
                    break;
                case "number":
                    d.putDouble(k, v);
                    break;
                default:
                    if ( v instanceof UnitValue ) {
                        var uc = new Object;
                        uc["px"] = charIDToTypeID("#Rlt"); // unitDistance
                        uc["%"] = charIDToTypeID("#Prc"); // unitPercent
                        d.putUnitDouble(k, uc[v.type], v.value);
                    } else {
                        throw( new Error("Unsupported type in objectToDescriptor " + typeof(v) ) );
        return d;
    // Function: descriptorToObject
    // Usage: update a JavaScript Object from an ActionDescriptor
    // Input: JavaScript Object (o), current object to update (output)
    //        Photoshop ActionDescriptor (d), descriptor to pull new params for object from
    //        object unique string (s)
    //        JavaScript Function (f), post process converter utility to convert
    // Return: Nothing, update is applied to passed in JavaScript Object (o)
    // NOTE: Only boolean, string, number and UnitValue are supported, use a post processor
    //       to convert (f) other types to one of these forms.
    // REUSE: This routine is used in other scripts. Please update those if you
    //        modify. I am not using include or eval statements as I want these
    //        scripts self contained.
    function descriptorToObject (o, d, s, f) {
        var l = d.count;
        if (l) {
            var keyMessage = app.charIDToTypeID( 'Msge' );
            if ( d.hasKey(keyMessage) && ( s != d.getString(keyMessage) )) return;
        for (var i = 0; i < l; i++ ) {
            var k = d.getKey(i); // i + 1 ?
            var t = d.getType(k);
            strk = app.typeIDToStringID(k);
            switch (t) {
                case DescValueType.BOOLEANTYPE:
                    o[strk] = d.getBoolean(k);
                    break;
                case DescValueType.STRINGTYPE:
                    o[strk] = d.getString(k);
                    break;
                case DescValueType.DOUBLETYPE:
                    o[strk] = d.getDouble(k);
                    break;
                case DescValueType.UNITDOUBLE:
                    var uc = new Object;
                    uc[charIDToTypeID("#Rlt")] = "px"; // unitDistance
                    uc[charIDToTypeID("#Prc")] = "%"; // unitPercent
                    uc[charIDToTypeID("#Pxl")] = "px"; // unitPixels
                    var ut = d.getUnitDoubleType(k);
                    var uv = d.getUnitDoubleValue(k);
                    o[strk] = new UnitValue( uv, uc[ut] );
                    break;
                case DescValueType.INTEGERTYPE:
                case DescValueType.ALIASTYPE:
                case DescValueType.CLASSTYPE:
                case DescValueType.ENUMERATEDTYPE:
                case DescValueType.LISTTYPE:
                case DescValueType.OBJECTTYPE:
                case DescValueType.RAWTYPE:
                case DescValueType.REFERENCETYPE:
                default:
                    throw( new Error("Unsupported type in descriptorToObject " + t ) );
        if (undefined != f) {
            o = f(o);
    // Function: preProcessExportInfo
    // Usage: convert Photoshop enums to strings for storage
    // Input: JavaScript Object of my params for this script
    // Return: JavaScript Object with objects converted for storage
    function preProcessExportInfo(o) {
        o.tiffCompression = o.tiffCompression.toString();
        o.pdfEncoding = o.pdfEncoding.toString();
        o.targaDepth = o.targaDepth.toString();
        o.bmpDepth = o.bmpDepth.toString();
        return o;
    // Function: postProcessExportInfo
    // Usage: convert strings from storage to Photoshop enums
    // Input: JavaScript Object of my params in string form
    // Return: JavaScript Object with objects in enum form
    function postProcessExportInfo(o) {
        o.tiffCompression = eval(o.tiffCompression);
        o.pdfEncoding = eval(o.pdfEncoding);
        o.targaDepth = eval(o.targaDepth);
        o.bmpDepth = eval(o.bmpDepth);
        return o;
    // Function: StrToIntWithDefault
    // Usage: convert a string to a number, first stripping all characters
    // Input: string and a default number
    // Return: a number
    function StrToIntWithDefault( s, n ) {
        var onlyNumbers = /[^0-9]/g;
        var t = s.replace( onlyNumbers, "" );
        t = parseInt( t );
        if ( ! isNaN( t ) ) {
            n = t;
        return n;
    // End X2L.jsx

  • Error in Export Layers to Files (PSCS 5)

    When I try Scripts-export layers to files in PS CS5, I get the message "Error 519: Server Interface error (No component returned from CreateWidget- line 250)".
    This script used to work well. Anybody any idea what to do, cause I ain't got a clue (-:).
    Thanks in advance!
    Rob

    Hi Rob
    Any chance you have a Windows computer/folder mounted on your computer. There's an odd behavior that happens with a couple scripts; Export to layers, Image Processor and Dr Browns 1-2-3 scripts, when a particular Windows environment is logged into your computer. Also, Bridge AOM is effected.
    see below if you do have a Windows computer mounted:
    http://forums.adobe.com/thread/707155?tstart=0
    http://forums.adobe.com/thread/708719?tstart=0
    no workaround but to unmount the Windows computer when running the script. ( you will also need to restart PS)
    good luck

  • Fireworks does not export layers to files

    I'm trying to do a very simple task in Fireworks and for some reason it will not work. I have a document with one Page and one State and 30 Layers. All I need to to do is export each Layer to a File. According to Adobe's own documentation all I should need to do is select Export > Layers to Files. However, no matter how many times I try this all it does is export the first layer. This is one of the most simple task imaginable and yet it doesn't work, which I find unacceptable for a piece of software that costs as much as Fireworks does. Has anyone else had this problem? Is there some secrect undocumented trick I'm not aware of?
    Any help would be appreciated. My company is ready to purchase 50 copies of Fireworks for our UX team, but if this is how the app behaves I'm going to recommend going with another program that works as advertised.

    I have multiple layers. I made the mistake you're referring to when I first started using Fireworks so that was the first thing I checked. I noticed some other things in FW acting wonky, so I installed the latest update and rebooted my machine and everything seems to be working fine now. Thanks for the quick reply.

  • Modding the Export Layers to Files script to preserve .jpg quality

    Please forgive me if I am posting this incorrectly, but as the thread I initially replied to is marked as Answered I started to wonder whether my question would be seen or not so I started this new thread.  My original question is located in the thread http://forums.adobe.com/message/2795719#2795719 because Kari was having a similar issue to mine, but with a different file format.  My original text:
    I am having a similar issue, except that I need to save each layer as a .jpg, and the Export Layers to Files script is compressing the images in some fashion so that a previously seamlessly tiling layer now has a border that ruins the tile.  If I save each layer individually using either the Save As command or Save for Web and Devices with the proper settings (Maximum Quality, Progressive, and Baseline Standard), the resulting images don't acquire this border, so I feel pretty certain it is something in the script that is messing up (changing the compression of) the layers, but I honestly don't know what.  I have tried modifiying the jpeg portion of the script this way, hoping to prevent it from deviating from the usual Save As options:
            case jpegIndex:
                docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".jpg");
                jpgSaveOptions = new JPEGSaveOptions();
                jpgSaveOptions.embedColorProfile = true;
                jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
                jpgSaveOptions.matte = MatteType.NONE;
                jpgSaveOptions.quality = jpegQuality; // 12
                docRef.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);
                break;
    but this doesn't seem to affect whatever setting is being changed.  Layers saved to .jpg this way still acquire the border.  I don't see what line might control whether the image is saved as progressive or not, nor anything to affect the text setting "Maximum" that I use when I successfully save each layer individually.
    I am a complete novice at scripting, so please excuse/explain the obvious mistakes I may be making here.
    I have since installed the script listener plug in and isolated a bit of script for saving the intended way, and hope to insert this snippet into the Export Layers as Files script, but I can tell that some of the lines are extraneous (like where it points to the file path I took), but I don't know what is safe to trim out.  I sincerely appreciate any assistance with this!

    Here is the script that uses scriptlistner to do the jpeg save. Note I changed the name by adding '_mod' to the end to remind you that it has been edited. You can remove the origianl version by moving the file to another folder outside the scripts folder or by adding ~ at the start of the filename.
    I recommend saving this as Export Layers to Files_mod.jsx. If this doesn't work for you we can try using the scriptlistener saveForWeb.
    // Copyright 2007.  Adobe Systems, Incorporated.  All rights reserved.
    // This script will export each layer in the document to a separate file.
    // Written by Naoki Hada
    // ZStrings and auto layout by Tom Ruark
    @@@BUILDINFO@@@ Export Layers To Files.jsx 1.0.0.16
    // BEGIN__HARVEST_EXCEPTION_ZSTRING
    <javascriptresource>
    <name>Export Layers to Files_mod...</name>
    <category>layers</category>
    <enableinfo>true</enableinfo>
    <eventid>6f1c2cf5-4a97-4e32-8f59-f5d7a087adef</eventid>
    <terminology><![CDATA[<< /Version 1
                             /Events <<
                              /6f1c2cf5-4a97-4e32-8f59-f5d7a087adef [Export Layers to Files_mod /noDirectParam <<
                               /message [($$$/Actions/Key/Message=Message) /char]
                               /destination [($$$/Actions/Key/Destination=Destination) /char]
                               /fileNamePrefix [($$$/Actions/Key/FileNamePrefix=Prefix) /char]
                               /visibleOnly [($$$/Actions/Key/CompsObject/UseVisibility=Visibility) /boolean]
                               /fileType  [($$$/Actions/Key/FileType=File Type) /integer]
                               /icc [($$$/Actions/Key/PDFGenericFormat/KeepProfile=Keep Profile) /boolean]
                               /jpegQuality [($$$/Actions/Key/JPEGQuality=JPEG Quality) /char]
                               /psdMaxComp [($$$/Actions/Key/MaximizePSDCompatibility=maximize compatibility for Photoshop files) /boolean]
                               /tiffCompression [($$$/Actions/Key/TiffCompression=TIFF encoding) /char]
                               /tiffJpegQuality [($$$/Actions/Key/TIFFJPEGQuality=TIFF JPEG Quality) /char]
                               /pdfEncoding [($$$/Actions/Key/PDFEncoding=PDF encoding) /char]
                               /pdfJpegQuality [($$$/Actions/Key/PDFJPEGQuality=PDF JPEG Quality) /char]
                               /targaDepth [($$$/Actions/Key/Depth/TargaDepth=Targa depth) /char]
                               /bmpDepth [($$$/Actions/Key/Depth/BMPDepth=BMP depth) /char]
                               /png24Transparency [($$$/Actions/Key/Layer/PNG24PreserveTransparency=PNG 24 Preserve Transparency) /boolean]
                               /png24Interlaced [($$$/Actions/Key/Layer/PNG24Interlaced=PNG 24 Interlaced) /boolean]
                               /png24Trim [($$$/Image/Trim/PNG24=PNG 24 Trim) /boolean]
                               /png8Transparency [($$$/Actions/Key/Layer/PNG8PreserveTransparency=PNG 8 Preserve Transparency) /boolean]
                               /png8Interlaced [($$$/Actions/Key/Layer/PNG8Interlaced=PNG 8 Interlaced) /boolean]
                               /png8Trim [($$$/Image/Trim/PNG8=PNG 8 Trim) /boolean]
                              >>]
                             >>
                          >> ]]></terminology>
    </javascriptresource>
    // END__HARVEST_EXCEPTION_ZSTRING
    // enable double clicking from the Macintosh Finder or the Windows Explorer
    #target photoshop
    // debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
    // $.level = 0;
    // debugger; // launch debugger on next line
    // on localized builds we pull the $$$/Strings from a .dat file, see documentation for more details
    $.localize = true;
    //=================================================================
    // Globals
    //=================================================================
    // UI strings to be localized
    //var strTitle = localize("$$$/JavaScripts/ExportLayersToFiles/Title=Export Layers To Files");
    strTitle = "Export Layers To Files"
    var strButtonRun = localize("$$$/JavaScripts/ExportLayersToFiles/Run=Run");
    var strButtonCancel = localize("$$$/JavaScripts/ExportLayersToFiles/Cancel=Cancel");
    var strHelpText = localize("$$$/JavaScripts/ExportLayersToFiles/Help=Please specify the format and location for saving each layer as a file.");
    var strLabelDestination = localize("$$$/JavaScripts/ExportLayersToFiles/Destination=Destination:");
    var strButtonBrowse = localize("$$$/JavaScripts/ExportLayersToFiles/Browse=&Browse...");
    var strLabelFileNamePrefix = localize("$$$/JavaScripts/ExportLayersToFiles/FileNamePrefix=File Name Prefix:");
    var strCheckboxVisibleOnly = localize("$$$/JavaScripts/ExportLayersToFiles/VisibleOnly=&Visible Layers Only");
    var strLabelFileType = localize("$$$/JavaScripts/ExportLayersToFiles/FileType=File Type:");
    var strCheckboxIncludeICCProfile = localize("$$$/JavaScripts/ExportLayersToFiles/IncludeICC=&Include ICC Profile");
    var strJPEGOptions = localize("$$$/JavaScripts/ExportLayersToFiles/JPEGOptions=JPEG Options:");
    var strLabelQuality = localize("$$$/JavaScripts/ExportLayersToFiles/Quality=Quality:");
    var strPSDOptions = localize("$$$/JavaScripts/ExportLayersToFiles/PSDOptions=PSD Options:");
    var strCheckboxMaximizeCompatibility = localize("$$$/JavaScripts/ExportLayersToFiles/Maximize=&Maximize Compatibility");
    var strTIFFOptions = localize("$$$/JavaScripts/ExportLayersToFiles/TIFFOptions=TIFF Options:");
    var strLabelImageCompression = localize("$$$/JavaScripts/ExportLayersToFiles/ImageCompression=Image Compression:");
    var strNone = localize("$$$/JavaScripts/ExportLayersToFiles/None=None");
    var strPDFOptions = localize("$$$/JavaScripts/ExportLayersToFiles/PDFOptions=PDF Options:");
    var strLabelEncoding = localize("$$$/JavaScripts/ExportLayersToFiles/Encoding=Encoding:");
    var strTargaOptions = localize("$$$/JavaScripts/ExportLayersToFiles/TargaOptions=Targa Options:");
    var strLabelDepth = localize("$$$/JavaScripts/ExportLayersToFiles/Depth=Depth:");
    var strRadiobutton16bit = localize("$$$/JavaScripts/ExportLayersToFiles/Bit16=16bit");
    var strRadiobutton24bit = localize("$$$/JavaScripts/ExportLayersToFiles/Bit24=24bit");
    var strRadiobutton32bit = localize("$$$/JavaScripts/ExportLayersToFiles/Bit32=32bit");
    var strBMPOptions = localize("$$$/JavaScripts/ExportLayersToFiles/BMPOptions=BMP Options:");
    var strAlertSpecifyDestination = localize("$$$/JavaScripts/ExportLayersToFiles/SpecifyDestination=Please specify destination.");
    var strAlertDestinationNotExist = localize("$$$/JavaScripts/ExportLayersToFiles/DestionationDoesNotExist=Destination does not exist.");
    var strTitleSelectDestination = localize("$$$/JavaScripts/ExportLayersToFiles/SelectDestination=Select Destination");
    var strAlertDocumentMustBeOpened = localize("$$$/JavaScripts/ExportLayersToFiles/OneDocument=You must have a document open to export!");
    var strAlertNeedMultipleLayers = localize("$$$/JavaScripts/ExportLayersToFiles/NoLayers=You need a document with multiple layers to export!");
    var strAlertWasSuccessful = localize("$$$/JavaScripts/ExportLayersToFiles/Success= was successful.");
    var strUnexpectedError = localize("$$$/JavaScripts/ExportLayersToFiles/Unexpected=Unexpected error");
    var strMessage = localize("$$$/JavaScripts/ExportLayersToFiles/Message=Export Layers To Files action settings");
    var     stretQuality = localize( "$$$/locale_specific/JavaScripts/ExportLayersToFiles/ETQualityLength=30" );
    var     stretDestination = localize( "$$$/locale_specific/JavaScripts/ExportLayersToFiles/ETDestinationLength=160" );
    var     strddFileType = localize( "$$$/locale_specific/JavaScripts/ExportLayersToFiles/DDFileType=100" );
    var     strpnlOptions = localize( "$$$/locale_specific/JavaScripts/ExportLayersToFiles/PNLOptions=100" );
    var strPNG8Options = localize("$$$/JavaScripts/ExportLayersToFiles/PNG8Options=PNG-8 Options:");
    var strCheckboxPNGTransparency = localize("$$$/JavaScripts/ExportLayersToFiles/Transparency=Transparency");
    var strCheckboxPNGInterlaced = localize("$$$/JavaScripts/ExportLayersToFiles/Interlaced=Interlaced");
    var strCheckboxPNGTrm = localize("$$$/JavaScripts/ExportLayersToFiles/Trim=Trim Layers");
    var strPNG24Options = localize("$$$/JavaScripts/ExportLayersToFiles/PNG24Options=PNG-24 Options:");
    // the drop down list indexes for file type
    var bmpIndex = 0;
    var jpegIndex = 1;
    var pdfIndex = 2;
    var psdIndex = 3;
    var targaIndex = 4;
    var tiffIndex = 5;
    var png8Index = 6;
    var png24Index = 7;
    // the drop down list indexes for tiff compression
    var compNoneIndex = 0;
    var compLZWIndex = 1;
    var compZIPIndex = 2;
    var compJPEGIndex = 3;
    // ok and cancel button
    var runButtonID = 1;
    var cancelButtonID = 2;
    // Dispatch
    main();
    // Functions
    // Function: main
    // Usage: the core routine for this script
    // Input: <none>
    // Return: <none>
    function main() {
        if ( app.documents.length <= 0 ) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert( strAlertDocumentMustBeOpened );
             return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
        var exportInfo = new Object();
        initExportInfo(exportInfo);
         // look for last used params via Photoshop registry, getCustomOptions will throw if none exist
         try {
              var d = app.getCustomOptions("4d633fbb-ed90-480d-8e03-cccb16131a34");
              descriptorToObject(exportInfo, d, strMessage, postProcessExportInfo);
         catch(e) {
              // it's ok if we don't have any options, continue with defaults
         // see if I am getting descriptor parameters
        descriptorToObject(exportInfo, app.playbackParameters, strMessage, postProcessExportInfo);
        if ( DialogModes.ALL == app.playbackDisplayDialogs ) {
             if (cancelButtonID == settingDialog(exportInfo)) {
                  return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
        try {
            var docName = app.activeDocument.name;  // save the app.activeDocument name before duplicate.
            var layerCount = app.documents[docName].layers.length;
            var layerSetsCount = app.documents[docName].layerSets.length;
            if ((layerCount <= 1)&&(layerSetsCount <= 0)) {
                if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                    alert( strAlertNeedMultipleLayers );
                  return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
            } else {
                var rememberMaximize;
                var needMaximize = exportInfo.psdMaxComp ? QueryStateType.ALWAYS : QueryStateType.NEVER;
                if ( exportInfo.fileType == psdIndex && app.preferences.maximizeCompatibility != needMaximize ) {
                    rememberMaximize = app.preferences.maximizeCompatibility;
                    app.preferences.maximizeCompatibility = needMaximize;
                app.activeDocument = app.documents[docName];
                var duppedDocument = app.activeDocument.duplicate();
                duppedDocument.activeLayer = duppedDocument.layers[duppedDocument.layers.length-1]; // for removing
                setInvisibleAllArtLayers(duppedDocument);
                exportChildren(duppedDocument, app.documents[docName], exportInfo, duppedDocument, exportInfo.fileNamePrefix);
                duppedDocument.close( SaveOptions.DONOTSAVECHANGES );
                   var d = objectToDescriptor(exportInfo, strMessage, preProcessExportInfo);
                app.putCustomOptions("4d633fbb-ed90-480d-8e03-cccb16131a34", d);
                   var dd = objectToDescriptor(exportInfo, strMessage, preProcessExportInfo);
                app.playbackParameters = dd;
                if ( rememberMaximize != undefined ) {
                    app.preferences.maximizeCompatibility = rememberMaximize;
                if ( DialogModes.ALL == app.playbackDisplayDialogs ) {
                    alert(strTitle + strAlertWasSuccessful);
                app.playbackDisplayDialogs = DialogModes.ALL;
        } catch (e) {
            if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                alert(e);
             return 'cancel'; // quit, returning 'cancel' (dont localize) makes the actions palette not record our script
    // Function: settingDialog
    // Usage: pop the ui and get user settings
    // Input: exportInfo object containing our parameters
    // Return: on ok, the dialog info is set to the exportInfo object
    function settingDialog(exportInfo) {
        dlgMain = new Window("dialog", strTitle);
        // match our dialog background color to the host application
         var brush = dlgMain.graphics.newBrush (dlgMain.graphics.BrushType.THEME_COLOR, "appDialogBackground");
        dlgMain.graphics.backgroundColor = brush;
        dlgMain.graphics.disabledBackgroundColor = dlgMain.graphics.backgroundColor;
         dlgMain.orientation = 'column';
         dlgMain.alignChildren = 'left';
         // -- top of the dialog, first line
        dlgMain.add("statictext", undefined, strLabelDestination);
         // -- two groups, one for left and one for right ok, cancel
         dlgMain.grpTop = dlgMain.add("group");
         dlgMain.grpTop.orientation = 'row';
         dlgMain.grpTop.alignChildren = 'top';
         dlgMain.grpTop.alignment = 'fill';
         // -- group top left
         dlgMain.grpTopLeft = dlgMain.grpTop.add("group");
         dlgMain.grpTopLeft.orientation = 'column';
         dlgMain.grpTopLeft.alignChildren = 'left';
         dlgMain.grpTopLeft.alignment = 'fill';
         // -- the second line in the dialog
         dlgMain.grpSecondLine = dlgMain.grpTopLeft.add("group");
         dlgMain.grpSecondLine.orientation = 'row';
         dlgMain.grpSecondLine.alignChildren = 'center';
        dlgMain.etDestination = dlgMain.grpSecondLine.add("edittext", undefined, exportInfo.destination.toString());
        dlgMain.etDestination.preferredSize.width = StrToIntWithDefault( stretDestination, 160 );
        dlgMain.btnBrowse = dlgMain.grpSecondLine.add("button", undefined, strButtonBrowse);
        dlgMain.btnBrowse.onClick = function() {
              var defaultFolder = dlgMain.etDestination.text;
              var testFolder = new Folder(dlgMain.etDestination.text);
              if (!testFolder.exists) {
                   defaultFolder = "~";
              var selFolder = Folder.selectDialog(strTitleSelectDestination, defaultFolder);
              if ( selFolder != null ) {
                 dlgMain.etDestination.text = selFolder.fsName;
              dlgMain.defaultElement.active = true;
         // -- the third line in the dialog
        dlgMain.grpTopLeft.add("statictext", undefined, strLabelFileNamePrefix);
         // -- the fourth line in the dialog
        dlgMain.etFileNamePrefix = dlgMain.grpTopLeft.add("edittext", undefined, exportInfo.fileNamePrefix.toString());
        dlgMain.etFileNamePrefix.alignment = 'fill';
        dlgMain.etFileNamePrefix.preferredSize.width = StrToIntWithDefault( stretDestination, 160 );
         // -- the fifth line in the dialog
        dlgMain.cbVisible = dlgMain.grpTopLeft.add("checkbox", undefined, strCheckboxVisibleOnly);
        dlgMain.cbVisible.value = exportInfo.visibleOnly;
         // -- the sixth line is the panel
        dlgMain.pnlFileType = dlgMain.grpTopLeft.add("panel", undefined, strLabelFileType);
         dlgMain.pnlFileType.alignment = 'fill';
        // -- now a dropdown list
        dlgMain.ddFileType = dlgMain.pnlFileType.add("dropdownlist");
        dlgMain.ddFileType.preferredSize.width = StrToIntWithDefault( strddFileType, 100 );
        dlgMain.ddFileType.alignment = 'left';
        dlgMain.ddFileType.add("item", "BMP");
        dlgMain.ddFileType.add("item", "JPEG");
        dlgMain.ddFileType.add("item", "PDF");
         dlgMain.ddFileType.add("item", "PSD");
        dlgMain.ddFileType.add("item", "Targa");
        dlgMain.ddFileType.add("item", "TIFF");
        dlgMain.ddFileType.add("item", "PNG-8");
        dlgMain.ddFileType.add("item", "PNG-24");
         dlgMain.ddFileType.onChange = function() {
              hideAllFileTypePanel();
            dlgMain.cbIcc.show();
              switch(this.selection.index) {
                   case bmpIndex:     
                        dlgMain.pnlFileType.pnlOptions.text = strBMPOptions;
                        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.show();     
                        break;
                   case jpegIndex:     
                        dlgMain.pnlFileType.pnlOptions.text = strJPEGOptions;
                        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.show();
                     dlgMain.cbIcc.hide();
                        break;
                   case tiffIndex:     
                        dlgMain.pnlFileType.pnlOptions.text = strTIFFOptions;
                        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.show();     
                        break;
                   case pdfIndex:     
                        dlgMain.pnlFileType.pnlOptions.text = strPDFOptions;
                        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.show();     
                        break;
                   case targaIndex:
                        dlgMain.pnlFileType.pnlOptions.text = strTargaOptions;
                        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.show();     
                        break;
                   case png8Index:          
                        dlgMain.pnlFileType.pnlOptions.text = strPNG8Options;
                        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.show();     
                        break;
                   case png24Index:          
                        dlgMain.pnlFileType.pnlOptions.text = strPNG24Options;
                        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.show();     
                        break;
                   case psdIndex:     
                   default:          
                        dlgMain.pnlFileType.pnlOptions.text = strPSDOptions;
                        dlgMain.pnlFileType.pnlOptions.grpPSDOptions.show();     
                        break;
        dlgMain.ddFileType.items[exportInfo.fileType].selected = true;
         // -- now after all the radio buttons
        dlgMain.cbIcc = dlgMain.pnlFileType.add("checkbox", undefined, strCheckboxIncludeICCProfile);
        dlgMain.cbIcc.value = exportInfo.icc;
        dlgMain.cbIcc.alignment = 'left';
         // -- now the options panel that changes
        dlgMain.pnlFileType.pnlOptions = dlgMain.pnlFileType.add("panel", undefined, "Options");
        dlgMain.pnlFileType.pnlOptions.alignment = 'fill';
        dlgMain.pnlFileType.pnlOptions.orientation = 'stack';
        dlgMain.pnlFileType.pnlOptions.preferredSize.height = StrToIntWithDefault( strpnlOptions, 100 );
         // PSD options
        dlgMain.pnlFileType.pnlOptions.grpPSDOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPSDOptions.cbMax = dlgMain.pnlFileType.pnlOptions.grpPSDOptions.add("checkbox", undefined, strCheckboxMaximizeCompatibility);
        dlgMain.pnlFileType.pnlOptions.grpPSDOptions.cbMax.value = exportInfo.psdMaxComp;
        dlgMain.pnlFileType.pnlOptions.grpPSDOptions.visible = (exportInfo.fileType == psdIndex);
         // PNG8 options
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Trans = dlgMain.pnlFileType.pnlOptions.grpPNG8Options.add("checkbox", undefined, strCheckboxPNGTransparency.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Inter = dlgMain.pnlFileType.pnlOptions.grpPNG8Options.add("checkbox", undefined, strCheckboxPNGInterlaced.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Trm = dlgMain.pnlFileType.pnlOptions.grpPNG8Options.add("checkbox", undefined, strCheckboxPNGTrm.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Trans.value = exportInfo.png8Transparency;
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Inter.value = exportInfo.png8Interlaced;
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Trm.value = exportInfo.png8Trim;
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.visible = (exportInfo.fileType == png8Index);
        // PNG24 options
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trans = dlgMain.pnlFileType.pnlOptions.grpPNG24Options.add("checkbox", undefined, strCheckboxPNGTransparency.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Inter = dlgMain.pnlFileType.pnlOptions.grpPNG24Options.add("checkbox", undefined, strCheckboxPNGInterlaced.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trm = dlgMain.pnlFileType.pnlOptions.grpPNG24Options.add("checkbox", undefined, strCheckboxPNGTrm.toString());
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trans.value = exportInfo.png24Transparency;
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Inter.value = exportInfo.png24Interlaced;
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trm.value = exportInfo.png24Trim;
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.visible = (exportInfo.fileType == png24Index);
         // JPEG options
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.add("statictext", undefined, strLabelQuality);
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.etQuality = dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.add("edittext", undefined, exportInfo.jpegQuality.toString());
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.etQuality.preferredSize.width = StrToIntWithDefault( stretQuality, 30 );
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.visible = (exportInfo.fileType == jpegIndex);
         // TIFF options
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.orientation = 'column';
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.visible = (exportInfo.fileType == tiffIndex);
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.alignment = 'left';
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.add("statictext", undefined, strLabelImageCompression);
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.add("dropdownlist");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.add("item", strNone);
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.add("item", "LZW");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.add("item", "ZIP");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.add("item", "JPEG");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.onChange = function() {
              if (this.selection.index == compJPEGIndex) {
                   dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.stQuality.enabled = true;
                   dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.enabled = true;
              } else {
                   dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.stQuality.enabled = false;
                   dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.enabled = false;
         dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.alignment = 'left';
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.stQuality = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.add("statictext", undefined, strLabelQuality);
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.add("edittext", undefined, exportInfo.tiffJpegQuality.toString());
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.preferredSize.width = StrToIntWithDefault( stretQuality, 30 );
         dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.graphics.disabledBackgroundColor = brush;
         var index;
        switch (exportInfo.tiffCompression) {
              case TIFFEncoding.NONE:     index = compNoneIndex; break;
            case TIFFEncoding.TIFFLZW:  index = compLZWIndex; break;
            case TIFFEncoding.TIFFZIP:  index = compZIPIndex; break;
            case TIFFEncoding.JPEG:     index = compJPEGIndex; break;
            default: index = compNoneIndex;    break;
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.items[index].selected = true;
         if (TIFFEncoding.JPEG != exportInfo.tiffCompression) { // if not JPEG
              dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.stQuality.enabled = false;
              dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.enabled = false;
         // PDF options
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.orientation = 'column';
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.visible = (exportInfo.fileType == pdfIndex);
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.alignment = 'left';
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.add("statictext", undefined, strLabelEncoding);
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbZip = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.add("radiobutton", undefined, "ZIP");
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbZip.onClick = function() {
              dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.stQuality.enabled = false;  
              dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.enabled = false;  
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbJpeg = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.add("radiobutton", undefined, "JPEG");
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbJpeg.onClick = function() {
              dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.stQuality.enabled = true;  
              dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.enabled = true;  
         dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.alignment = 'left';
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.stQuality = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.add("statictext", undefined, strLabelQuality);
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.add("edittext", undefined, exportInfo.pdfJpegQuality.toString());
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.preferredSize.width = StrToIntWithDefault( stretQuality, 30 );
         dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.graphics.disabledBackgroundColor = brush;
        switch (exportInfo.pdfEncoding) {
            case PDFEncoding.PDFZIP:
                   dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbZip.value  = true;    break;
            case PDFEncoding.JPEG:
            default:
                   dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbJpeg.value = true;    break;
        if (PDFEncoding.JPEG != exportInfo.pdfEncoding) {
            dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.stQuality.enabled = false;
            dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.enabled = false;
         // Targa options
         dlgMain.pnlFileType.pnlOptions.grpTargaOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.add("statictext", undefined, strLabelDepth);
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.visible = (exportInfo.fileType == targaIndex);
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb16bit = dlgMain.pnlFileType.pnlOptions.grpTargaOptions.add( "radiobutton", undefined, strRadiobutton16bit);
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb24bit = dlgMain.pnlFileType.pnlOptions.grpTargaOptions.add( "radiobutton", undefined, strRadiobutton24bit);
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb32bit = dlgMain.pnlFileType.pnlOptions.grpTargaOptions.add( "radiobutton", undefined, strRadiobutton32bit);
        switch (exportInfo.targaDepth) {
            case TargaBitsPerPixels.SIXTEEN:     dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb16bit.value = true;   break;
            case TargaBitsPerPixels.TWENTYFOUR:  dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb24bit.value = true;   break;
            case TargaBitsPerPixels.THIRTYTWO:   dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb32bit.value = true;   break;
            default: dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb24bit.value = true;   break;
         // BMP options
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions = dlgMain.pnlFileType.pnlOptions.add("group");
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.add("statictext", undefined, strLabelDepth);
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.visible = (exportInfo.fileType == bmpIndex);
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb16bit = dlgMain.pnlFileType.pnlOptions.grpBMPOptions.add( "radiobutton", undefined, strRadiobutton16bit);
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb24bit = dlgMain.pnlFileType.pnlOptions.grpBMPOptions.add( "radiobutton", undefined, strRadiobutton24bit);
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb32bit = dlgMain.pnlFileType.pnlOptions.grpBMPOptions.add( "radiobutton", undefined, strRadiobutton32bit);
        switch (exportInfo.bmpDepth) {
            case BMPDepthType.SIXTEEN:   dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb16bit.value = true;   break;
            case BMPDepthType.TWENTYFOUR:dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb24bit.value = true;   break;
            case BMPDepthType.THIRTYTWO: dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb32bit.value = true;   break;
            default: dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb24bit.value = true;   break;
         // the right side of the dialog, the ok and cancel buttons
         dlgMain.grpTopRight = dlgMain.grpTop.add("group");
         dlgMain.grpTopRight.orientation = 'column';
         dlgMain.grpTopRight.alignChildren = 'fill';
         dlgMain.btnRun = dlgMain.grpTopRight.add("button", undefined, strButtonRun );
        dlgMain.btnRun.onClick = function() {
              // check if the setting is properly
              var destination = dlgMain.etDestination.text;
              if (destination.length == 0) {
                 alert(strAlertSpecifyDestination);
                   return;
              var testFolder = new Folder(destination);
              if (!testFolder.exists) {
                 alert(strAlertDestinationNotExist);
                   return;
              dlgMain.close(runButtonID);
         dlgMain.btnCancel = dlgMain.grpTopRight.add("button", undefined, strButtonCancel );
        dlgMain.btnCancel.onClick = function() {
              dlgMain.close(cancelButtonID);
         dlgMain.defaultElement = dlgMain.btnRun;
         dlgMain.cancelElement = dlgMain.btnCancel;
            // the bottom of the dialog
         dlgMain.grpBottom = dlgMain.add("group");
         dlgMain.grpBottom.orientation = 'column';
         dlgMain.grpBottom.alignChildren = 'left';
         dlgMain.grpBottom.alignment = 'fill';
        dlgMain.pnlHelp = dlgMain.grpBottom.add("panel");
        dlgMain.pnlHelp.alignment = 'fill';
        dlgMain.etHelp = dlgMain.pnlHelp.add("statictext", undefined, strHelpText, {multiline:true});
        dlgMain.etHelp.alignment = 'fill';
         dlgMain.onShow = function() {
              dlgMain.ddFileType.onChange();
        // give the hosting app the focus before showing the dialog
        app.bringToFront();
        dlgMain.center();
        var result = dlgMain.show();
        if (cancelButtonID == result) {
              return result;  // close to quit
        // get setting from dialog
        exportInfo.destination = dlgMain.etDestination.text;
        exportInfo.fileNamePrefix = dlgMain.etFileNamePrefix.text;
        exportInfo.visibleOnly = dlgMain.cbVisible.value;
        exportInfo.fileType = dlgMain.ddFileType.selection.index;
        exportInfo.icc = dlgMain.cbIcc.value;
        exportInfo.jpegQuality = dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.etQuality.text;
        exportInfo.psdMaxComp = dlgMain.pnlFileType.pnlOptions.grpPSDOptions.cbMax.value;
        index = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpCompression.ddCompression.selection.index;
        if (index == compNoneIndex) {
              exportInfo.tiffCompression = TIFFEncoding.NONE;
        if (index == compLZWIndex) {
              exportInfo.tiffCompression = TIFFEncoding.TIFFLZW;
        if (index == compZIPIndex) {
              exportInfo.tiffCompression = TIFFEncoding.TIFFZIP;
        if (index == compJPEGIndex) {
              exportInfo.tiffCompression = TIFFEncoding.JPEG;
        exportInfo.tiffJpegQuality = dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.grpQuality.etQuality.text;
        if (dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbZip.value) {
              exportInfo.pdfEncoding = PDFEncoding.PDFZIP;
        if (dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpCompression.rbJpeg.value) {
              exportInfo.pdfEncoding = PDFEncoding.JPEG;
        exportInfo.pdfJpegQuality = dlgMain.pnlFileType.pnlOptions.grpPDFOptions.grpQuality.etQuality.text;
        if (dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb16bit.value) {
              exportInfo.targaDepth = TargaBitsPerPixels.SIXTEEN;
        if (dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb24bit.value) {
              exportInfo.targaDepth = TargaBitsPerPixels.TWENTYFOUR;
        if (dlgMain.pnlFileType.pnlOptions.grpTargaOptions.rb32bit.value) {
              exportInfo.targaDepth = TargaBitsPerPixels.THIRTYTWO;
        if (dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb16bit.value) {
              exportInfo.bmpDepth = BMPDepthType.SIXTEEN;
        if (dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb24bit.value) {
              exportInfo.bmpDepth = BMPDepthType.TWENTYFOUR;
        if (dlgMain.pnlFileType.pnlOptions.grpBMPOptions.rb32bit.value) {
              exportInfo.bmpDepth = BMPDepthType.THIRTYTWO;
        return result;
    // Function: hideAllFileTypePanel
    // Usage: hide all the panels in the common actions
    // Input: <none>, dlgMain is a global for this script
    // Return: <none>, all panels are now hidden
    function hideAllFileTypePanel() {
        dlgMain.pnlFileType.pnlOptions.grpPSDOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpJPEGOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpTIFFOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpPDFOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpTargaOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpBMPOptions.hide();
        dlgMain.pnlFileType.pnlOptions.grpPNG8Options.hide();
        dlgMain.pnlFileType.pnlOptions.grpPNG24Options.hide();
    // Function: initExportInfo
    // Usage: create our default parameters
    // Input: a new Object
    // Return: a new object with params set to default
    function initExportInfo(exportInfo) {
        exportInfo.destination = new String("");
        exportInfo.fileNamePrefix = new String("untitled_");
        exportInfo.visibleOnly = false;
        exportInfo.fileType = psdIndex;
        exportInfo.icc = true;
        exportInfo.jpegQuality = 8;
        exportInfo.psdMaxComp = true;
        exportInfo.tiffCompression = TIFFEncoding.NONE;
        exportInfo.tiffJpegQuality = 8;
        exportInfo.pdfEncoding = PDFEncoding.JPEG;
        exportInfo.pdfJpegQuality = 8;
        exportInfo.targaDepth = TargaBitsPerPixels.TWENTYFOUR;
        exportInfo.bmpDepth = BMPDepthType.TWENTYFOUR;
        exportInfo.png24Transparency = true;
        exportInfo.png24Interlaced = false;
        exportInfo.png24Trim = true;
        exportInfo.png8Transparency = true;
        exportInfo.png8Interlaced = false;
        exportInfo.png8Trim = true;
        try {
            exportInfo.destination = Folder(app.activeDocument.fullName.parent).fsName; // destination folder
            var tmp = app.activeDocument.fullName.name;
            exportInfo.fileNamePrefix = decodeURI(tmp.substring(0, tmp.indexOf("."))); // filename body part
        } catch(someError) {
            exportInfo.destination = new String("");
            exportInfo.fileNamePrefix = app.activeDocument.name; // filename body part
    // Function: saveFile
    // Usage: the worker routine, take our params and save the file accordingly
    // Input: reference to the document, the name of the output file,
    //        export info object containing more information
    // Return: <none>, a file on disk
    function saveFile( docRef, fileNameBody, exportInfo) {
        switch (exportInfo.fileType) {
            case jpegIndex:
                 docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
                /*var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".jpg");
                    jpgSaveOptions = new JPEGSaveOptions();
                    jpgSaveOptions.embedColorProfile = exportInfo.icc;
                    jpgSaveOptions.quality = exportInfo.jpegQuality;
                    docRef.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);*/
                var desc= new ActionDescriptor();
                var formatDesc = new ActionDescriptor();
                formatDesc.putInteger( charIDToTypeID( "EQlt" ), exportInfo.jpegQuality );
                formatDesc.putEnumerated( charIDToTypeID( "MttC" ), charIDToTypeID( "MttC" ), charIDToTypeID( "None" ) );
                desc.putObject( charIDToTypeID( "As  " ), charIDToTypeID( "JPEG" ), formatDesc );
                desc.putPath( charIDToTypeID( "In  " ), saveFile );
                desc.putBoolean( charIDToTypeID( "Cpy " ), true );
                executeAction( charIDToTypeID( "save" ), desc4, DialogModes.NO );
                break;
            case psdIndex:
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".psd");
                psdSaveOptions = new PhotoshopSaveOptions();
                psdSaveOptions.embedColorProfile = exportInfo.icc;
                psdSaveOptions.maximizeCompatibility = exportInfo.psdMaxComp;
                docRef.saveAs(saveFile, psdSaveOptions, true, Extension.LOWERCASE);
                break;
            case tiffIndex:
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".tif");
                tiffSaveOptions = new TiffSaveOptions();
                tiffSaveOptions.embedColorProfile = exportInfo.icc;
                tiffSaveOptions.imageCompression = exportInfo.tiffCompression;
                if (TIFFEncoding.JPEG == exportInfo.tiffCompression) {
                        tiffSaveOptions.jpegQuality = exportInfo.tiffJpegQuality;
                docRef.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);
                break;
            case pdfIndex:
                  if (docRef.bitsPerChannel == BitsPerChannelType.THIRTYTWO)
                        docRef.bitsPerChannel = BitsPerChannelType.SIXTEEN;
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".pdf");
                pdfSaveOptions = new PDFSaveOptions();
                pdfSaveOptions.embedColorProfile = exportInfo.icc;
                pdfSaveOptions.encoding = exportInfo.pdfEncoding;
                if (PDFEncoding.JPEG == exportInfo.pdfEncoding) {
                        pdfSaveOptions.jpegQuality = exportInfo.pdfJpegQuality;
                docRef.saveAs(saveFile, pdfSaveOptions, true, Extension.LOWERCASE);
                break;
            case targaIndex:
                  docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".tga");
                targaSaveOptions = new TargaSaveOptions();
                targaSaveOptions.resolution = exportInfo.targaDepth;
                docRef.saveAs(saveFile, targaSaveOptions, true, Extension.LOWERCASE);
                break;
            case bmpIndex:
                  docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".bmp");
                bmpSaveOptions = new BMPSaveOptions();
                bmpSaveOptions.depth = exportInfo.bmpDepth;
                docRef.saveAs(saveFile, bmpSaveOptions, true, Extension.LOWERCASE);
                break;
            case png8Index:
                   saveFile(docRef, fileNameBody, exportInfo, dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Inter.value, dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trans.value);
                 function saveFile( docRef, fileNameBody, exportInfo, interlacedValue, transparencyValue) {
                        var id5 = charIDToTypeID( "Expr" );
                             var desc3 = new ActionDescriptor();
                             var id6 = charIDToTypeID( "Usng" );
                                  var desc4 = new ActionDescriptor();
                                  var id7 = charIDToTypeID( "Op  " );
                                  var id8 = charIDToTypeID( "SWOp" );
                                  var id9 = charIDToTypeID( "OpSa" );
                                  desc4.putEnumerated( id7, id8, id9 );
                                  var id10 = charIDToTypeID( "Fmt " );
                                  var id11 = charIDToTypeID( "IRFm" );
                                  var id12 = charIDToTypeID( "PNG8" );
                                  desc4.putEnumerated( id10, id11, id12 );
                                  var id13 = charIDToTypeID( "Intr" ); //Interlaced
                                  desc4.putBoolean( id13, interlacedValue );
                                  var id14 = charIDToTypeID( "RedA" );
                                  var id15 = charIDToTypeID( "IRRd" );
                                  var id16 = charIDToTypeID( "Prcp" ); //Algorithm
                                  desc4.putEnumerated( id14, id15, id16 );
                                  var id17 = charIDToTypeID( "RChT" );
                                  desc4.putBoolean( id17, false );
                                  var id18 = charIDToTypeID( "RChV" );
                                  desc4.putBoolean( id18, false );
                                  var id19 = charIDToTypeID( "AuRd" );
                                  desc4.putBoolean( id19, false );
                                  var id20 = charIDToTypeID( "NCol" ); //NO. Of Colors
                                  desc4.putInteger( id20, 256 );
                                  var id21 = charIDToTypeID( "Dthr" ); //Dither
                                  var id22 = charIDToTypeID( "IRDt" );
                                  var id23 = charIDToTypeID( "Dfsn" ); //Dither type
                                  desc4.putEnumerated( id21, id22, id23 );
                                  var id24 = charIDToTypeID( "DthA" );
                                  desc4.putInteger( id24, 100 );
                                  var id25 = charIDToTypeID( "DChS" );
                                  desc4.putInteger( id25, 0 );
                                  var id26 = charIDToTypeID( "DCUI" );
                                  desc4.putInteger( id26, 0 );
                                  var id27 = charIDToTypeID( "DChT" );
                                  desc4.putBoolean( id27, false );
                                  var id28 = charIDToTypeID( "DChV" );
                                  desc4.putBoolean( id28, false );
                                  var id29 = charIDToTypeID( "WebS" );
                                  desc4.putInteger( id29, 0 );
                                  var id30 = charIDToTypeID( "TDth" ); //transparency dither
                                  var id31 = charIDToTypeID( "IRDt" );
                                  var id32 = charIDToTypeID( "None" );
                                  desc4.putEnumerated( id30, id31, id32 );
                                  var id33 = charIDToTypeID( "TDtA" );
                                  desc4.putInteger( id33, 100 );
                                  var id34 = charIDToTypeID( "Trns" ); //Transparency
                                  desc4.putBoolean( id34, transparencyValue );
                                  var id35 = charIDToTypeID( "Mtt " );
                                  desc4.putBoolean( id35, true );           //matte
                                  var id36 = charIDToTypeID( "MttR" ); //matte color
                                  desc4.putInteger( id36, 255 );
                                  var id37 = charIDToTypeID( "MttG" );
                                  desc4.putInteger( id37, 255 );
                                  var id38 = charIDToTypeID( "MttB" );
                                  desc4.putInteger( id38, 255 );
                                  var id39 = charIDToTypeID( "SHTM" );
                                  desc4.putBoolean( id39, false );
                                  var id40 = charIDToTypeID( "SImg" );
                                  desc4.putBoolean( id40, true );
                                  var id41 = charIDToTypeID( "SSSO" );
                                  desc4.putBoolean( id41, false );
                                  var id42 = charIDToTypeID( "SSLt" );
                                       var list1 = new ActionList();
                                  desc4.putList( id42, list1 );
                                  var id43 = charIDToTypeID( "DIDr" );
                                  desc4.putBoolean( id43, false );
                                  var id44 = charIDToTypeID( "In  " );
                                  desc4.putPath( id44, new File( exportInfo.destination + "/" + fileNameBody + ".png") );
                             var id45 = stringIDToTypeID( "SaveForWeb" );
                             desc3.putObject( id6, id45, desc4 );
                        executeAction( id5, desc3, DialogModes.NO );
                //var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".png");
                //bmpSaveOptions = new BMPSaveOptions();
                //bmpSaveOptions.depth = exportInfo.bmpDepth;
                //docRef.saveAs(saveFile, bmpSaveOptions, true, Extension.LOWERCASE);
                break;
            case png24Index:
                 saveFile(docRef, fileNameBody, exportInfo, dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Inter.value, dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trans.value);
                 function saveFile( docRef, fileNameBody, exportInfo, interlacedValue, transparencyValue) {
                   var id6 = charIDToTypeID( "Expr" );
                        var desc3 = new ActionDescriptor();
                        var id7 = charIDToTypeID( "Usng" );
                             var desc4 = new ActionDescriptor();
                             var id8 = charIDToTypeID( "Op  " );
                             var id9 = charIDToTypeID( "SWOp" );
                             var id10 = charIDToTypeID( "OpSa" );
                           desc4.putEnumerated( id8, id9, id10 );
                             var id11 = charIDToTypeID( "Fmt " );
                             var id12 = charIDToTypeID( "IRFm" );
                             var id13 = charIDToTypeID( "PN24" );
                             desc4.putEnumerated( id11, id12, id13 );
                             var id14 = charIDToTypeID( "Intr" );
                             desc4.putBoolean( id14, interlacedValue );
                             var id15 = charIDToTypeID( "Trns" );
                             desc4.putBoolean( id15, transparencyValue );
                             var id16 = charIDToTypeID( "Mtt " );
                             desc4.putBoolean( id16, true );
                             var id17 = charIDToTypeID( "MttR" );
                             desc4.putInteger( id17, 255 );
                             var id18 = charIDToTypeID( "MttG" );
                             desc4.putInteger( id18, 255 );
                             var id19 = charIDToTypeID( "MttB" );
                             desc4.putInteger( id19, 255 );
                             var id20 = charIDToTypeID( "SHTM" );
                             desc4.putBoolean( id20, false );
                             var id21 = charIDToTypeID( "SImg" );
                             desc4.putBoolean( id21, true );
                             var id22 = charIDToTypeID( "SSSO" );
                             desc4.putBoolean( id22, false );
                             var id23 = charIDToTypeID( "SSLt" );
                                  var list1 = new ActionList();
                             desc4.putList( id23, list1 );
                             var id24 = charIDToTypeID( "DIDr" );
                             desc4.putBoolean( id24, false );
                             var id25 = charIDToTypeID( "In  " );
                             desc4.putPath( id25, new File( exportInfo.destination + "/" + fileNameBody + ".png") );
                        var id26 = stringIDToTypeID( "SaveForWeb" );
                        desc3.putObject( id7, id26, desc4 );
                   executeAction( id6, desc3, DialogModes.NO );
                //var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".png");
                //bmpSaveOptions = new BMPSaveOptions();
                //bmpSaveOptions.depth = exportInfo.bmpDepth;
                //docRef.saveAs(saveFile, bmpSaveOptions, true, Extension.LOWERCASE);
                break;
            default:
                if ( DialogModes.NO != app.playbackDisplayDialogs ) {
                    alert(strUnexpectedError);
                break;
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function zeroSuppress (num, digit) {
        var tmp = num.toString();
        while (tmp.length < digit) {
              tmp = "0" + tmp;
        return tmp;
    // Function: setInvisibleAllArtLayers
    // Usage: unlock and make invisible all art layers, recursively
    // Input: document or layerset
    // Return: all art layers are unlocked and invisible
    function setInvisibleAllArtLayers(obj) {
        for( var i = 0; i < obj.artLayers.length; i++) {
            obj.artLayers[i].allLocked = false;
            obj.artLayers[i].visible = false;
        for( var i = 0; i < obj.layerSets.length; i++) {
            setInvisibleAllArtLayers(obj.layerSets[i]);
    // Function: removeAllInvisibleArtLayers
    // Usage: remove all the invisible art layers, recursively
    // Input: document or layer set
    // Return: <none>, all layers that were invisible are now gone
    function removeAllInvisibleArtLayers(obj) {
        for( var i = obj.artLayers.length-1; 0 <= i; i--) {
            try {
                if(!obj.artLayers[i].visible) {
                        obj.artLayers[i].remove();
            catch (e) {
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            removeAllInvisibleArtLayers(obj.layerSets[i]);
    // Function: removeAllEmptyLayerSets
    // Usage: find all empty layer sets and remove them, recursively
    // Input: document or layer set
    // Return: empty layer sets are now gone
    function removeAllEmptyLayerSets(obj) {
        var foundEmpty = true;
        for( var i = obj.layerSets.length-1; 0 <= i; i--) {
            if( removeAllEmptyLayerSets(obj.layerSets[i])) {
                obj.layerSets[i].remove();
            } else {
                foundEmpty = false;
        if (obj.artLayers.length > 0) {
              foundEmpty = false;
        return foundEmpty;
    // Function: zeroSuppress
    // Usage: return a string padded to digit(s)
    // Input: num to convert, digit count needed
    // Return: string padded to digit length
    function removeAllInvisible(docRef) {
        removeAllInvisibleArtLayers(docRef);
        removeAllEmptyLayerSets(docRef);
    // Function: exportChildren
    // Usage: find all the children in this document to save
    // Input: duplicate document, original document, export info,
    //        reference to document, starting file name
    // Return: <none>, documents are saved accordingly
    function exportChildren(dupObj, orgObj, exportInfo, dupDocRef, fileNamePrefix) {
        for( var i = 0; i < dupObj.artLayers.length; i++) {
            if (exportInfo.visibleOnly) { // visible layer only
                if (!orgObj.artLayers[i].visible) {
                        continue;
            dupObj.artLayers[i].visible = true;
            var layerName = dupObj.artLayers[i].name;  // store layer name before change doc
            var duppedDocumentTmp = dupDocRef.duplicate();
            if ((psdIndex == exportInfo.fileType)||(png24Index == exportInfo.fileType)||(png8Index == exportInfo.fileType)) { // PSD: Keep transparency
                removeAllInvisible(duppedDocumentTmp);
                //PNGFileOptions
                    if ((png24Index == exportInfo.fileType)||(png8Index == exportInfo.fileType)) { // PNGFileOptions
                        if ((dlgMain.pnlFileType.pnlOptions.grpPNG8Options.png8Trm.value == true)&&(png8Index == exportInfo.fileType)) { //transparancy checked?
                             if (activeDocument.activeLayer.isBackgroundLayer == false) { //is it anything but a background layer?
                                  app.activeDocument.trim(TrimType.TRANSPARENT);
                        if ((dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Trm.value == true)&&(png24Index == exportInfo.fileType)) { //transparancy checked?
                             if (activeDocument.activeLayer.isBackgroundLayer == false) { //is it anything but a background layer?
                                  app.activeDocument.trim(TrimType.TRANSPARENT);
            } else { // just flatten
                duppedDocumentTmp.flatten();
            var fileNameBody = fileNamePrefix;
            fileNameBody += "_" + zeroSuppress(i, 4);
            fileNameBody += "_" + la

  • How can I get the script Export Layers to Files to export compressed pngs?

    I would love to be able to take advantage of Photoshop's compressed png when using the script Export Layers to Files. I there a way I could modify the script to do this?
    TIA!!!
    ========================
    I found it ... I needed to add a line to the pngSaveOptions (around line #886) ...
                var saveFile = new File(exportInfo.destination + "/" + fileNameBody + ".png");
                pngSaveOptions = new PNGSaveOptions();
                pngSaveOptions.interlaced = false;
                // trying to compress png files
                pngSaveOptions.compression = 9;
                docRef.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);
                break;
    =========================

    It does. The standalone XML Export was only offered by itself
    in the
    registration incentives. Sorry.
    Nancy Gill
    Adobe Community Expert
    Author: Dreamweaver 8 e-book for the DMX Zone
    Co-Author: Dreamweaver MX: Instant Troubleshooter (August,
    2003)
    Technical Editor: DMX 2004: The Complete Reference, DMX 2004:
    A Beginner''s
    Guide, Mastering Macromedia Contribute
    Technical Reviewer: Dynamic Dreamweaver MX/DMX: Advanced PHP
    Web Development
    "neilcreagh" <[email protected]> wrote in
    message
    news:f4rsrt$ptf$[email protected]..
    > I've just purchased Dreamweaver CS3 and, after
    registering, the email sent
    > offered me a free gift. I chose the free font. Another
    option is the
    > Dreamweaver XML Export Extension for Spry and I would
    like to purchase
    > this (it
    > stated the value at ?15) but I can't find it anywhere?
    >
    > The interaktonline website says that its functionality
    has been included
    > in
    > the Dreamweaver Developer Toolbox - but does this mean
    that I have to
    > purchase
    > the entire toolbox?
    >

  • Export layers to files - png

    When I run the Export layers to Files script to save my layers as .pngs, it automatically changes the files to 72 dpi. I need them to stay at 300 dpi, like in the original file. Can anyone help me, how do I change the script in order to do this? Thanks in advance!

    It uses a scriptlistner version of save for web for both png8 and png24. To change the png24 so it uses a normal save and retains the dpi find this line of code  "case png24Index:" It should be about line 840. Comment everything between that line and "break:", about line 890. Then add the following lines.
         pngSaveOptions = new PNGSaveOptions();
         pngSaveOptions.interlaced = dlgMain.pnlFileType.pnlOptions.grpPNG24Options.png24Inter.value;
         app.activeDocument.saveAs( new File( exportInfo.destination + "/" + fileNameBody + ".png") , pngSaveOptions, true, Extension.LOWERCASE );
    I have not tested this, you may also have to add checks for 8bit, no extra layers, no alpha or spot channels, etc. SFW does most of that by default. But by using the saveAs method and setting copy to true I think it will be ok.

Maybe you are looking for

  • Is it possible to get the handle of a HTML UI element in JSPDynpage?

    Hi Experts, I am new to Portal Development and my current requirement is as follows: User is provided an option to upload a file to KM from the JSP for which i used a HTMLB fileupload UI element. I was able to upload the file to the KM. But the clien

  • Trying to get help over the phone!

    Hi! How on earth do you get help with a general enquiry by phoning BT?  All I get is multiple choices to connect and not one of those multiple choices allow anyone to connect to an operator if the question you have is not included in those multiple c

  • Lightroom vs jpeg export

    Hi, My images do not look the same as the way they appear in lightroom. Seems like they are loosing contrast/shadows.

  • Why full screen caller images are not apperaing On ios 7.1 ?? Plzz apple get that feature backsk your question.

    Simce i updated to ios 7.1 full screen caller images are gone.. This is a major feature drawback from ios 7.0.6 If any knows how to fix this problem ..plzz reply asap

  • Read PO Item Text

    CALL FUNCTION 'READ_TEXT'        EXPORTING           CLIENT                  = SY-MANDT           ID                      = 'PB'           LANGUAGE                = 'E'           NAME                    = TNAME           OBJECT                  = 'PB