Hello,
For a week now I am trying to find a solution to what I want to achieve, but with no luck. Hopefully you guys can help me out.
I am willing to create a script that makes a selection of a clipping path, clears the selection, trims the image and changes the resolution of the image. So far, I have succeeded, mainly by copy pasting from the internet, but it works.
Now for a following step, I am looking for a script that provides a dialog which lets you select an input and output folder, and then runs the script to let's say 'batch process' all the images in the input folder. I have been trying to alter a script I found 'Batch Convert' by Peter Kahrel. But since I have only been scripting for a week now (read copy pasting), I had no luck in altering the script to my needs.
If there is a solution without the use of a custom dialog, I would be happy to hear so.
So I was hoping to find my solace here. I would be very thankful for your help and/or tips!
This is the code which does what I want, but without the input-output part...
Thanks a lot in advance!
Kind regards,
Code: Select all #target photoshop
//Unlock Layer
docLay=app.activeDocument.layers;
l=app.activeDocument.layers.length;
while (l>0) {
l--;
docLay[l].isBackgroundLayer = false;
docLay[l].allLocked = false;
}
//Clipping path
if (app.documents.length > 0) {
if (app.activeDocument.pathItems.length > 0) {
var thePath = app.activeDocument.pathItems[0];
app.activeDocument.selection.selectAll();
thePath.makeSelection(0, true, SelectionType.DIMINISH);
//Clear Selection
try {
app.activeDocument.selection.clear();
} catch(e) {
alert("Niets geselecteerd!");
}
//Resolution
var doc = activeDocument;
var res = doc.resolution;
doc.resizeImage(undefined, undefined, 150, ResampleMethod.BICUBIC);
//Trim
app.activeDocument.trim()
//End
alert("Succes!");
}
};
Input Output - Clipping path automation
Input Output - Clipping path automation
If you just need the user to enter input and output folders and you don't want to create a dialog you can use a Folder class method to use the built-in OS dialog that allows them to select the folders.
var myInputFolder = Folder.selectDialog ("Select source folder");
var myOutputFolder = Folder.selectDialog ("Select destination folder");
You should check the value of those variables for null. A null value means the user canceled the dialog without selecting a folder.
var myInputFolder = Folder.selectDialog ("Select source folder");
var myOutputFolder = Folder.selectDialog ("Select destination folder");
You should check the value of those variables for null. A null value means the user canceled the dialog without selecting a folder.
Input Output - Clipping path automation
Mike,
Thanks for your reply.
When I insert the lines you mentioned I get an error, as in: Photoshop does not open the images inside the inputfolder to process them...
Is there a way to select the images inside the inputfolder, of is there something specific I am missing?
Thanks again!
Kind regards,
Thanks for your reply.
When I insert the lines you mentioned I get an error, as in: Photoshop does not open the images inside the inputfolder to process them...
Is there a way to select the images inside the inputfolder, of is there something specific I am missing?
Thanks again!
Kind regards,
Input Output - Clipping path automation
Sorry, yes the code I posted only allows the user to select the folders. For the input folder you will need to use getFiles() to get an array of files in the selected folder. You will also need to add code that uses the output folder to save the document.Code: Select allvar myInputFolder = Folder.selectDialog ("Select source folder");
if(myInputFolder!=null){
var myFiles = myInputFolder.getFiles(/.(jpg|psd|tif|png)$/i);
for(var fileIndex=0;fileIndex<myFiles.length;fileIndex++){
var tempDoc = app.open(myFiles[fileIndex]);
// do something with the document
}
}
if(myInputFolder!=null){
var myFiles = myInputFolder.getFiles(/.(jpg|psd|tif|png)$/i);
for(var fileIndex=0;fileIndex<myFiles.length;fileIndex++){
var tempDoc = app.open(myFiles[fileIndex]);
// do something with the document
}
}
Input Output - Clipping path automation
Mike,
Thanks a lot, works perfectly!
Just one hiccup, when photoshop opens the files in the input folder, it only processes the active file. The other files remain unedited.
I suppose this has something to do with: app.activeDocument?
Once again, thanks a lot in advance!
Kind regards,
Thanks a lot, works perfectly!
Just one hiccup, when photoshop opens the files in the input folder, it only processes the active file. The other files remain unedited.
I suppose this has something to do with: app.activeDocument?
Once again, thanks a lot in advance!
Kind regards,
Input Output - Clipping path automation
I guess it depends on how you coded your script. Normally a script would open one file, process that documents, save and close. Then it repeats as many times as needed to process the folder. There is only one document open at a time so the script knows that app.activeDocument is the document to process. You could use a different way to reference the document such as the tempDoc reference I have in the snippet above.
If your script opens all the files in a folder at once for some reason then the script would need a way to keep track/switch documents.
If your script opens all the files in a folder at once for some reason then the script would need a way to keep track/switch documents.
Input Output - Clipping path automation
Mike,
Thanks again for your reply.
I've been looking for a way that will iterate between all active documents, but to no avail...
What causes the script to not cycle through and apply all the actions in the script to each open document?
Code: Select all #target photoshop
//Input selection
var myInputFolder = Folder.selectDialog ("INPUT");
if(myInputFolder!=null){
var myFiles = myInputFolder.getFiles(/.(jpg|psd|tif|png)$/i);
for(var fileIndex=0;fileIndex<myFiles.length;fileIndex++){
var tempDoc = app.open(myFiles[fileIndex]);
}
}
//Track
docs = app.documents;
for (i=0; i < docs.length; i++) {
doc = docs;
app.activeDocument = doc;
};
//Unlock Layer
docLay=app.activeDocument.layers;
l=app.activeDocument.layers.length;
while (l>0) {
l--;
docLay[l].isBackgroundLayer = false;
docLay[l].allLocked = false;
}
//Clipping path
if (app.documents.length > 0) {
if (app.activeDocument.pathItems.length > 0) {
var thePath = app.activeDocument.pathItems[0];
app.activeDocument.selection.selectAll();
thePath.makeSelection(0, true, SelectionType.DIMINISH);
}
};
//Clear Selection
try {
app.activeDocument.selection.clear();
} catch(e) {
alert("Sorry, dit document bevat geen pad!");
}
//Resolution
var doc = activeDocument;
var res = doc.resolution;
doc.resizeImage(undefined, undefined, 150, ResampleMethod.BICUBIC);
//Trim
app.activeDocument.trim()
//Save PNG
var doc = app.activeDocument;
var Path = doc.path;
var Name = doc.name.replace(/\.[^\.]+$/, '');
var Suffix = "_DSok";
var saveFile = File(Path + "/" + Name + Suffix + ".png");
SavePNG(saveFile);
function SavePNG(saveFile){
pngSaveOptions = new PNGSaveOptions();
activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
Thanks in advance.
Kind regards,
Thanks again for your reply.
I've been looking for a way that will iterate between all active documents, but to no avail...
What causes the script to not cycle through and apply all the actions in the script to each open document?
Code: Select all #target photoshop
//Input selection
var myInputFolder = Folder.selectDialog ("INPUT");
if(myInputFolder!=null){
var myFiles = myInputFolder.getFiles(/.(jpg|psd|tif|png)$/i);
for(var fileIndex=0;fileIndex<myFiles.length;fileIndex++){
var tempDoc = app.open(myFiles[fileIndex]);
}
}
//Track
docs = app.documents;
for (i=0; i < docs.length; i++) {
doc = docs;
app.activeDocument = doc;
};
//Unlock Layer
docLay=app.activeDocument.layers;
l=app.activeDocument.layers.length;
while (l>0) {
l--;
docLay[l].isBackgroundLayer = false;
docLay[l].allLocked = false;
}
//Clipping path
if (app.documents.length > 0) {
if (app.activeDocument.pathItems.length > 0) {
var thePath = app.activeDocument.pathItems[0];
app.activeDocument.selection.selectAll();
thePath.makeSelection(0, true, SelectionType.DIMINISH);
}
};
//Clear Selection
try {
app.activeDocument.selection.clear();
} catch(e) {
alert("Sorry, dit document bevat geen pad!");
}
//Resolution
var doc = activeDocument;
var res = doc.resolution;
doc.resizeImage(undefined, undefined, 150, ResampleMethod.BICUBIC);
//Trim
app.activeDocument.trim()
//Save PNG
var doc = app.activeDocument;
var Path = doc.path;
var Name = doc.name.replace(/\.[^\.]+$/, '');
var Suffix = "_DSok";
var saveFile = File(Path + "/" + Name + Suffix + ".png");
SavePNG(saveFile);
function SavePNG(saveFile){
pngSaveOptions = new PNGSaveOptions();
activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
Thanks in advance.
Kind regards,