• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Want to Automate saving an Image with multiple layer with each named with File name+Layer name

Community Beginner ,
Jan 15, 2023 Jan 15, 2023

Copy link to clipboard

Copied


While I have good knowlede of Photoshop in the editing side, I am inept when it comes to coding and scripting. So any help would be very appreciated. Thank you

I have a project where I have hundreds of images that I need to apply a dozen layers to. For cataloging puporses it seems that it would be best to name them by image name and add the layer name. I will end up with a dozen version of each image.

How do I create an action that will save the image with the File Name and add the layer's name. Then hide the current layer and show the next layer. Save as before and so on. For example I would end up with: 
1st image-  Swiss01_D01, Swiss01_D02, Swiss01_D03, Swiss01_D04
2nd image- Swiss02_D01, Swiss02_D02, Swiss02_D03, Swiss02_D04
3nd image- Swiss03_D01, Swiss03_D02, Swiss03_D03, Swiss03_D04...

Photoshop CC 2022
Mac OS Ventura

TOPICS
Actions and scripting

Views

736

Translate

Translate

Report

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

correct answers 1 Correct answer

Community Expert , Jan 15, 2023 Jan 15, 2023

 

edited

// save combinations of lowermost layer with one layer each;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var docName = myDocument.name;
    try {
    var basename = docName.match(/(.*)\.[^\.]+$/)[1];
    var docPath = myDocument.path;
    }
    catch (e) {
    var docPath = "~/Desktop"
    };    
    var theLayers = collectLayersNamesIndexAndIdentifier();
// jpg options;
    var jpegOptions = new JPEGSaveOptions();
    j
...

Votes

Translate

Translate
Adobe
Community Expert ,
Jan 15, 2023 Jan 15, 2023

Copy link to clipboard

Copied

What file format? 

An Action will not suffice and you need a Script. 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

I wanted to comeback and thank you. Wow, that script worked so well. AMAZING. Thanks again.

 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

Did you make any headway regarding the metadata? 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

 

edited

// save combinations of lowermost layer with one layer each;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var docName = myDocument.name;
    try {
    var basename = docName.match(/(.*)\.[^\.]+$/)[1];
    var docPath = myDocument.path;
    }
    catch (e) {
    var docPath = "~/Desktop"
    };    
    var theLayers = collectLayersNamesIndexAndIdentifier();
// jpg options;
    var jpegOptions = new JPEGSaveOptions();
    jpegOptions.quality = 9;
    jpegOptions.embedColorProfile = true;
    jpegOptions.matte = MatteType.NONE;
// hide except lowermost layer;
    showOrHideLayerById (theLayers[0][2], false);
    hideOtherLayersById (theLayers[0][2]);
// save copies;
    for (var m = 1; m < theLayers.length; m++) {
        showOrHideLayerById (theLayers[m][2], false);
        myDocument.saveAs((new File(docPath+"/"+ theLayers[0][0] + "_" + theLayers[m][0] + ".jpg")), jpegOptions, true);  
        showOrHideLayerById (theLayers[m][2], true);
    };
    };
////// collect layers //////
function collectLayersNamesIndexAndIdentifier () {
// get number of layers;
var ref = new ActionReference();
ref.putProperty(stringIDToTypeID('property'), stringIDToTypeID('numberOfLayers'));
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
// process the layers;
var theLayers = new Array;
for (var m = 0; m <= theNumber; m++) {
try {
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), m);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
// if group collect values;
if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" /*&& isBackground != true*/) {
var theName = layerDesc.getString(stringIDToTypeID('name'));
var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
var theIndex = layerDesc.getInteger(stringIDToTypeID('itemIndex'));
var theVisibility = layerDesc.getBoolean(stringIDToTypeID('visible'));
theLayers.push([theName, theIndex, theID, theVisibility])
};
}
catch (e) {};
};
return theLayers
};
// based on code by mike hale, via paul riggott;
function selectLayerByID(id,add){ 
    add = undefined ? add = false:add 
    var ref = new ActionReference();
        ref.putIdentifier(charIDToTypeID("Lyr "), id);
        var desc = new ActionDescriptor();
        desc.putReference(charIDToTypeID("null"), ref );
           if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) ); 
          desc.putBoolean( charIDToTypeID( "MkVs" ), false ); 
       try{
        executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
    }catch(e){
    alert(e.message); 
    }
    };
////// hide all other layers //////
function hideOtherLayersById (theID) {
    // =======================================================
        var desc4 = new ActionDescriptor();
            var list1 = new ActionList();
                var ref3 = new ActionReference();
                ref3.putIdentifier(charIDToTypeID("Lyr "), theID);
//                ref3.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
            list1.putReference( ref3 );
        desc4.putList( charIDToTypeID( "null" ), list1 );
        desc4.putBoolean( charIDToTypeID( "TglO" ), true );
    executeAction( charIDToTypeID( "Shw " ), desc4, DialogModes.NO );
    };
////// show or hide layer //////
function showOrHideLayerById (theID, theVisibility) {
    if (theVisibility == true) {var idhide = stringIDToTypeID( "hide" )}
    else {var idhide = stringIDToTypeID( "show" )};
    var desc22 = new ActionDescriptor();
    var list2 = new ActionList();
    var ref8 = new ActionReference();
    ref8.putIdentifier( stringIDToTypeID( "layer" ), theID );
    list2.putReference( ref8 );
    desc22.putList( stringIDToTypeID( "null" ), list2 );
    executeAction( idhide, desc22, DialogModes.NO );
};

 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

Wow, thanks. Did you write that on the fly? This is definitely above my pay grade. I will look for an article about how to install.

 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

Save the code as a txt-file, change the extension to .jsx and copy it into Photoshop’s Presets/Scripts-Folder; after restarting Photoshop it should be available under File > Scripts and can be assigned a Shortcut or used in an Action. 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

Hello sir, are you still around? 🙂 I need similar help but cant find script anywhere. 😞

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

@c.pfaffenbichler  provided me the script. Worked perfectly.   Then he explained how to install it. Make sure you thank him.

 

----->Save the code as a txt-file, change the extension to .jsx and copy it into Photoshop’s Presets/Scripts-Folder; after restarting Photoshop it should be available under File > Scripts and can be assigned a Shortcut or used in an Action. "

// save combinations of lowermost layer with one layer each;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var docName = myDocument.name;
    try {
    var basename = docName.match(/(.*)\.[^\.]+$/)[1];
    var docPath = myDocument.path;
    }
    catch (e) {
    var docPath = "~/Desktop"
    };    
    var theLayers = collectLayersNamesIndexAndIdentifier();
// jpg options;
    var jpegOptions = new JPEGSaveOptions();
    jpegOptions.quality = 9;
    jpegOptions.embedColorProfile = true;
    jpegOptions.matte = MatteType.NONE;
// hide except lowermost layer;
    showOrHideLayerById (theLayers[0][2], false);
    hideOtherLayersById (theLayers[0][2]);
// save copies;
    for (var m = 1; m < theLayers.length; m++) {
        showOrHideLayerById (theLayers[m][2], false);
        myDocument.saveAs((new File(docPath+"/"+ theLayers[0][0] + "_" + theLayers[m][0] + ".jpg")), jpegOptions, true);  
        showOrHideLayerById (theLayers[m][2], true);
    };
    };
////// collect layers //////
function collectLayersNamesIndexAndIdentifier () {
// get number of layers;
var ref = new ActionReference();
ref.putProperty(stringIDToTypeID('property'), stringIDToTypeID('numberOfLayers'));
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
// process the layers;
var theLayers = new Array;
for (var m = 0; m <= theNumber; m++) {
try {
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), m);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
// if group collect values;
if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" /*&& isBackground != true*/) {
var theName = layerDesc.getString(stringIDToTypeID('name'));
var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
var theIndex = layerDesc.getInteger(stringIDToTypeID('itemIndex'));
var theVisibility = layerDesc.getBoolean(stringIDToTypeID('visible'));
theLayers.push([theName, theIndex, theID, theVisibility])
};
}
catch (e) {};
};
return theLayers
};
// based on code by mike hale, via paul riggott;
function selectLayerByID(id,add){ 
    add = undefined ? add = false:add 
    var ref = new ActionReference();
        ref.putIdentifier(charIDToTypeID("Lyr "), id);
        var desc = new ActionDescriptor();
        desc.putReference(charIDToTypeID("null"), ref );
           if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) ); 
          desc.putBoolean( charIDToTypeID( "MkVs" ), false ); 
       try{
        executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
    }catch(e){
    alert(e.message); 
    }
    };
////// hide all other layers //////
function hideOtherLayersById (theID) {
    // =======================================================
        var desc4 = new ActionDescriptor();
            var list1 = new ActionList();
                var ref3 = new ActionReference();
                ref3.putIdentifier(charIDToTypeID("Lyr "), theID);
//                ref3.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
            list1.putReference( ref3 );
        desc4.putList( charIDToTypeID( "null" ), list1 );
        desc4.putBoolean( charIDToTypeID( "TglO" ), true );
    executeAction( charIDToTypeID( "Shw " ), desc4, DialogModes.NO );
    };
////// show or hide layer //////
function showOrHideLayerById (theID, theVisibility) {
    if (theVisibility == true) {var idhide = stringIDToTypeID( "hide" )}
    else {var idhide = stringIDToTypeID( "show" )};
    var desc22 = new ActionDescriptor();
    var list2 = new ActionList();
    var ref8 = new ActionReference();
    ref8.putIdentifier( stringIDToTypeID( "layer" ), theID );
    list2.putReference( ref8 );
    desc22.putList( stringIDToTypeID( "null" ), list2 );
    executeAction( idhide, desc22, DialogModes.NO );
};

 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

quote

I will look for an article about how to install.

 


By apatron@aol.com

 

Here you go:

 

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

 

Votes

Translate

Translate

Report

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

Copy link to clipboard

Copied

LATEST

Some related scripts:

 

https://github.com/mechanicious/photoshopCompositionComposer/blob/master/photoshopCompositionCompose...

 

______________________

 

 

https://github.com/Paul-Riggott/PS-Scripts/blob/master/Layer%20Saver%20Plus.jsx

 

Stephen_A_Marsh_0-1700813165667.png

 

 

https://github.com/Paul-Riggott/PS-Scripts/blob/master/Layer%20Saver.jsx

 

Stephen_A_Marsh_2-1700813165861.png

 

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

 

// CHANGE THE UI COLOR FROM:

win.graphics.backgroundColor = win.graphics.newBrush(win.graphics.BrushType.SOLID_COLOR, [0.99, 0.99, 0.99, 1]);

// TO:

win.graphics.backgroundColor = win.graphics.newBrush(win.graphics.BrushType.THEME_COLOR, "appDialogBackground");

 

Votes

Translate

Translate

Report

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