I want to use scripts to allow me to automatize creation of name badges. I have a PSD template of the badge that includes a slot for the photo and a text field for the name. The aproach I took in my script is simple:
1. Prompt the user to select the source folder for the photos.
2. For each folder in the folder, do the following:
- resize the photo
- copy the background layer of the photo
- close the document and focus back on the PSD template
- place the copied photo as a new layer
- translate it to a certain position so it fits into the photo slot of the template
- change the text in the text layer to the name of the photo we placed (which is the actual name of the person)
3. Save the photo as jpg with some given save options in a certain output folder.
Step 1 and 2 work just as needed. However, when I have to save the badge, I get a really strange error saying:
Here's the whole code (in JS) :
var sourceFolder = Folder.selectDialog ("Selecteaza folderul cu pozele: "); //prompt the user to select the source folder var files = new Array(); files = sourceFolder.getFiles (); //put the files from the folder inside an array var startRulerUnits = app.preferences.rulerUnits; //save the initial units used var startTypeUnits = app.preferences.typeUnits; app.preferences.rulerUnits = Units.PIXELS; //change the units to pixels so the translate command will work as expected app.preferences.typeUnits = TypeUnits.PIXELS; var mainDoc = app.documents.getByName ("Ecuson.psd"); //this is the name badge template var so = new JPEGSaveOptions(); //the save options i'll use with the save command so.embedColorProfile = true; so.formatOptions = FormatOptions.STANDARDBASELINE; so.matte = MatteType.WHITE; so.quality = 10; for(var i = 0; i<files.length; ++i){ //loop thru each photo in the folder var img = app.open(files[i]); //open the image var saveFile = new File("C:/Users/Eugen/Desktop/salvate/" + String.valueOf(i+1)); //this is the file where I'll save the jpg file var nume = img.name.replace(".jpg", ''); //this is the name of the image I just opened. I remove the jpg extension so only the name is left app.preferences.rulerUnits = startRulerUnits; //I change the units back t their original value as for this phase I need to use CM app.preferences.typeUnits = startTypeUnits; img.resizeImage (3, 4, 300); //resize the image to 3x4 cm at 300 dpi app.preferences.rulerUnits = Units.PIXELS; //change the units to pixels again app.preferences.typeUnits = TypeUnits.PIXELS; img.backgroundLayer.copy(); //copy the background (and only) layer of the image img.close(SaveOptions.DONOTSAVECHANGES); //close the document without saving changes app.activeDocument = mainDoc; //focus back on the badge template var pLayer = mainDoc.paste(); //paste the layer I just copied into the template pLayer.translate (-314, 33); //place the new layer where I need it to be mainDoc.layers.getByName("Name").textItem.contents = nume; //change the name on the badge to the name of the original file mainDoc.saveAs (saveFile, so, true, Extension.LOWERCASE); //this is ehere I have issues... } app.preferences.rulerUnits = startRulerUnits; //change back to centimeters app.preferences.typeUnits = startTypeUnits;
I guess it can only be a problem with the saveFile agument, as I can save the jpg manually from photoshop.
PS: using CS6
Thanks!