2017-03-07 2 views
0

J'essaie actuellement de faire un ajout à ce script Photoshop (le script récupère actuellement un certain nombre de fichiers image d'un dossier et remplace le contenu d'un objet intelligent et enregistre les jpgs individuels):Enregistrer le dossier de destination Photoshop Javascript

#target photoshop 
 
if (app.documents.length > 0) { 
 
var myDocument = app.activeDocument; 
 
var theName= myDocument.name.match(/(.*)\.[^\.]+$/)[1]; 
 
var thePath = myDocument.path; 
 
var theLayer = myDocument.activeLayer; 
 
// jpg options; 
 
var jpgopts = new JPEGSaveOptions(); 
 
jpgopts.embedProfile = true; 
 
jpgopts.formatOptions = FormatOptions.STANDARDBASELINE; 
 
jpgopts.matte = MatteType.NONE; 
 
jpgopts.quality = 8; 
 

 
// check if layer is smart object; 
 

 
if (theLayer.kind != "LayerKind.SMARTOBJECT") {alert ("selected layer is not a smart object")} 
 
else { 
 
// select files; 
 

 
if ($.os.search(/windows/i) != -1) {var theFiles = File.openDialog ("please select files", "*.psd;*.tif;*.jpg", true)} 
 
else { 
 

 
//var theFiles = File.openDialog ("please select files", getFiles, true)}; 
 

 
var theFolder = Folder.selectDialog ("select folder"); 
 
if (theFolder) { 
 
var theFiles = theFolder.getFiles(/\.(jpg|tif|eps|psd|png)$/i) 
 
} else { 
 
var theFiles = File.openDialog ("please select files", getFiles, true)}; 
 
}; 
 
if (theFiles) { 
 

 
// work through the array; 
 

 
      for (var m = 0; m < theFiles.length; m++) { 
 

 
// replace smart object; 
 

 
        theLayer = replaceContents (theFiles[m], theLayer); 
 
        var theNewName = theFiles[m].name.match(/(.*)\.[^\.]+$/)[1]; 
 

 
//save jpg; 
 

 
        myDocument.saveAs((new File(thePath+"/"+theName+"_"+theNewName+".jpg")),jpgopts,true); 
 
        } 
 
      } 
 
} 
 
}; 
 

 
////// get psds, tifs and jpgs from files ////// 
 

 
function getFiles (theFile) { 
 
    if (theFile.name.match(/\.(psd|tif|png)$/i) != null || theFile.constructor.name == "Folder") { 
 
      return true 
 
      }; 
 
    }; 
 

 
////// replace contents ////// 
 

 
function replaceContents (newFile, theSO) { 
 
app.activeDocument.activeLayer = theSO; 
 

 
// ======================================================= 
 

 
var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents"); 
 
    var desc3 = new ActionDescriptor(); 
 
    var idnull = charIDToTypeID("null"); 
 
    desc3.putPath(idnull, new File(newFile)); 
 
    var idPgNm = charIDToTypeID("PgNm"); 
 
    desc3.putInteger(idPgNm, 1); 
 
executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO); 
 
return app.activeDocument.activeLayer 
 
};

Qu'est-ce que je cherche à faire est intégrer un moyen d'ouvrir un dialogue qui me permettrait de sélectionner un dossier de destination pour les fichiers enregistrés, actuellement il enregistre les fichiers dans le même dossier que le psd ouvert.

Espérons que cela a du sens!

Merci à l'avance,

Rik

+0

D'accord, et où vous rencontrez des problèmes? – Amy

+0

Salut Amy! Merci beaucoup pour la réponse. Mon problème est vraiment mon manque de connaissances en JavaScript: S. Je ne suis pas sûr où dans ce code serait préférable d'insérer les lignes de code correctes pour ouvrir une boîte de dialogue qui me permet de définir un dossier de destination pour les fichiers enregistrés. –

Répondre

1

Stack Overflow est pas un service d'écriture de script. Mais ce que vous voulez apprendre, vous devez simplement ajouter l'option d'un dossier de dialogue

var thePath = myDocument.path; 
// manually save det destination folder 
var outputFolder = Folder.selectDialog("Choose folder to save files to"); 

puis définissez quand vous enregistrez vos fichiers

// myDocument.saveAs((new File(thePath+"/"+theName+"_"+theNewName+".jpg")),jpgopts,true); 
myDocument.saveAs((new File(outputFolder+"/"+theName+"_"+theNewName+".jpg")),jpgopts,true);