Hope the title does not sound to confusing. What i'm trying to do with a script:
Please see my diagram attached plus the short screencast here: http://recordit.co/2QnBK0ZV2M
Thanks for any help!
#target photoshop
//This stores the currently active document to the variable mockupDoc
var mockupDoc = app.activeDocument;
//This stores Front.psd file's name so Photoshop can look for the active layers in the correct document.
var designDoc = app.documents.getByName("Front.psd");
//Gets the name of tha active layer of Front.psd
var designlayer = designDoc.activeLayer;
// getting the name and location;
var docName = mockupDoc.name;
if (docName.indexOf(".") != -1) {var basename = docName.match(/(.*)\.[^\.]+$/)[1]}
else {var basename = docName};
// getting the location, if unsaved save to desktop;
try {var docPath = mockupDoc.path}
catch (e) {var docPath = "~/Desktop"};
// jpg options, But would love to save trough my Tiny png/jpg PS plugin instead PS native
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 9;
jpegOptions.embedColorProfile = true;
jpegOptions.matte = MatteType.NONE;
// Saves the Mockup File containing the Name of the active layer in Front.psd
mockupDoc.saveAs((new File(docPath+'/'+basename + ' ' + designDoc.activeLayer.name +'.jpg')),jpegOptions,true);
Added my current code above. I'm struggling with the following tasks:
How can i check, which layer is active in layerset/group "Colors" of the mockupDoc document and store this as variable to use it for the name on saving?
I need the script to go trough each layer of Front.psd from top to bottom like : Start with top layer make only this layer visible -> save this doc -> return to mockup.psd -> save this file as jpg and png -> return to Front.psd and got to the next layer to repeat these steps (visible/save/previous doc/save png jpg/ and so on)? How would the script know, when the last layer has been processed and stop the script?
Right now the script saves the files in the root folder of mockup.psd. Is it possible to have folders in there by colors (i.e. red, yellow..) and check the file i want to save for the variable "colors" i stored earlier and save to the yellow folder if variable is yellow?
Hope this does not sound to weird, my english sucks ;)
Thanks everyone for your kind help.
Thank you @Mr Mystery Guest
I solved most of the tasks in the meantime and added my code below. Maybe some other users will find parts of it helpful or have better solutions.
//================================= OPTIONS =================================
// jpg options.
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 9;
jpegOptions.embedColorProfile = true;
jpegOptions.matte = MatteType.NONE;
// PNG options.
pngOptions = new PNGSaveOptions()
pngOptions.compression = 0
pngOptions.interlaced = false
//================================= VARIABLES =================================
// Variables for the "Paste in Place" function
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
// Checks which one is the Mockup.psd file (as my names differ but allways contain "Mockup")
var docs = app.documents;
for(var i = docs.length - 1; i >= 0; i--){
if(docs[i].name.indexOf('Mockup') > 0){
var mockupDoc = docs[i];
}
}
// Getting the name and location of Mockup.psd and remove "Mockup" from the name/string.
var mockupDocName = mockupDoc.name.replace(/Mockup /i,'');
if (mockupDocName.indexOf(".") != -1) {var basename = mockupDocName.match(/(.*)\.[^\.]+$/)[1]}
else {var basename = mockupDocName};
// Getting the location of Mockup.psd;
var mockupDocPath = mockupDoc.path
// Setting variable for layerset "GTO Background"
var gtoBG = mockupDoc.layerSets.getByName("GTO Background");
// This stores Front.psd file's name so Photoshop can look for the active layers in the correct document.
var designDoc = app.documents.getByName("Designs Front.psd");
var currentLayer = designDoc.activeLayer;
// create a variable that holds the number of layers in the psd
var numOfLayers = designDoc.layers.length;
// temp string to hold all layer names
//var str = ""
// get the name of each layer
//var layerName = designDoc.layers[i].name;
// add the layer name to a string
//str += layerName + "\n";
function resetDesignDoc (){
// Sets "FRONT.psd" aka designDoc as active document.
app.activeDocument = designDoc;
// loop over each layer - from the background to the top
for (var i = numOfLayers -1; i >= 0 ; i--)
// for the top to the bottom use: for (var i = 0; i < numOfLayers; i++)
{
designDoc.layers[i].visible = false; // Hide all Layers
designDoc.activeLayer = designDoc.layers[0]; // Selects the top layer
designDoc.activeLayer.visible = true; // Make Top Layer Visible
}
};
//================================= MAIN =================================
// Reset "Front.psd" aka designDoc
resetDesignDoc()
var create = true;
while (create) {
CreateMockup(); // Create Item
gotoNextLayer(); // Select Next Layer
selectNEXT()
if(designDoc.activeLayer.name.indexOf("END") >= 0){
//alert('All Designs Applied')
var create = false;
}
}
// Create Mockup
function CreateMockup() {
// Sets "Mockup.psd" aka mockupDoc as active document.
app.activeDocument = mockupDoc;
// Toggles layerset "GTO BBACKGROUND" to visible for .jpg version export.
gtoBG.visible = true;
// Sets "FRONT.psd" aka designDoc as active document.
app.activeDocument = designDoc;
// Saves "Front.psd" to original destination and updates embeded content (smart object) in "Mockup.psd" aka mockupDoc
var designDocPath = designDoc.path;
var Name = designDoc.name.replace(/\.[^\.]+$/, '');
designDoc.saveAs(File(designDocPath + "/" + Name + ".psd"));
// Sets "Mockup.psd" aka mockupDoc as active document.
app.activeDocument = mockupDoc;
// Checks if current Design is a "FLEX" print or not.
if(designDoc.activeLayer.name.toLowerCase().indexOf("flex") >= 0){
//Hides Texture Overlays
Selecttexures();
}
// Creates a Sharpness Layer for the jpg version.
createSharpnessLayer ();
// Saves the composited image from Mockup.psd containing Filename minus "Mockup", Name of the visible layer "Colors" layerset and the Name of the active layer in Front.psd
mockupDoc.saveAs((new File(mockupDocPath + "/_Files Export/with GTO Background" +'/' + basename + ' ' + designDoc.activeLayer.name +'.jpg')),jpegOptions,true);
// Remove OLD Sharpness Layer
mockupDoc.layers.getByName('Sharpness').remove();
// Toggles layerset "GTO BBACKGROUND" to hidden for .png version export.
gtoBG.visible = false;
// Creates a Sharpness Layer for the png version.
createSharpnessLayer ();
// Saves the composited image from Mockup.psd containing Filename minus "Mockup", Name of the visible layer "Colors" layerset and the Name of the active layer in Front.psd
mockupDoc.saveAs((new File(mockupDocPath + "/_Files Export/png" +'/' + basename + ' ' + designDoc.activeLayer.name +'.png')),pngOptions,true);
// Remove OLD Sharpness Layer
mockupDoc.layers.getByName('Sharpness').remove();
} //END Create Items function
// Select Next Layer
function gotoNextLayer() {
// Sets "FRONT.psd" aka designDoc as active document.
app.activeDocument = designDoc;
};
// Selects Next Layer in Front.psd aka designDoc and makes only this one visible.
function selectNEXT(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Bckw'));
desc1.putReference(cTID('null'), ref1);
desc1.putBoolean(cTID('MkVs'), false);
executeAction(cTID('slct'), desc1, dialogMode);
};
//================================= HELPERS =================================
// "Paste in Place" function.
function pasteInPlace(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
desc1.putBoolean(sTID("inPlace"), true);
desc1.putEnumerated(cTID('AntA'), cTID('Annt'), cTID('Anno'));
executeAction(cTID('past'), desc1, dialogMode);
};
// Create "Sharpness" Layer.
function createSharpnessLayer () {
mockupDoc.selection.selectAll();
mockupDoc.selection.copy(true);
pasteInPlace();
mockupDoc.activeLayer.name = "Sharpness"
mockupDoc.activeLayer.move( mockupDoc, ElementPlacement.PLACEATBEGINNING );
mockupDoc.activeLayer.applyHighPass(0.5)
mockupDoc.activeLayer.blendMode = BlendMode.LINEARLIGHT;
mockupDoc.activeLayer.opacity = 50;
};
// Select all print texture overlays in "Mockuo.psd" aka mockupDoc
function Selecttexures() {
// Select
function step1(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putName(cTID('Lyr '), "LIGHT FABRIC TEXTURE");
desc1.putReference(cTID('null'), ref1);
desc1.putBoolean(cTID('MkVs'), false);
var list1 = new ActionList();
list1.putInteger(43);
desc1.putList(cTID('LyrI'), list1);
executeAction(cTID('slct'), desc1, dialogMode);
};
// Select Linked Layers
function step2(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Trgt'));
desc1.putReference(cTID('null'), ref1);
executeAction(sTID('selectLinkedLayers'), desc1, dialogMode);
};
// Hide
function step3(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
var list1 = new ActionList();
var ref1 = new ActionReference();
ref1.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Trgt'));
list1.putReference(ref1);
desc1.putList(cTID('null'), list1);
executeAction(cTID('Hd '), desc1, dialogMode);
};
step1(); // Select
step2(); // Select Linked Layers
step3(); // Hide
};