Skip to content

Instantly share code, notes, and snippets.

@rolftimmermans
Created June 25, 2014 14:24
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save rolftimmermans/936eb3abf99776070830 to your computer and use it in GitHub Desktop.
Save rolftimmermans/936eb3abf99776070830 to your computer and use it in GitHub Desktop.
Compressing all PNG images in a folder and its subfolders with TinyPNG
#target photoshop
/* Open the given file, and compress with TinyPNG. */
function compressFile(file) {
var document = open(file);
if (document.mode == DocumentMode.INDEXEDCOLOR) {
document.changeMode(ChangeMode.RGB);
}
var tinypng = new ActionDescriptor();
tinypng.putPath(charIDToTypeID("In "), file); /* Overwrite original! */
var compress = new ActionDescriptor();
compress.putObject(charIDToTypeID("Usng"), charIDToTypeID("tinY"), tinypng);
executeAction(charIDToTypeID("Expr"), compress, DialogModes.NO);
document.close(SaveOptions.DONOTSAVECHANGES);
}
/* Recursively compress files in the given folder, overwriting the originals. */
function compressFolder(folder) {
var children = folder.getFiles();
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child instanceof Folder) {
compressFolder(child);
} else {
/* Only attempt to compress PNG files. */
if (child.name.slice(-4).toLowerCase() == ".png") {
compressFile(child);
}
}
}
}
try {
compressFolder(Folder.selectDialog("Compress folder with TinyPNG"));
} catch(error) {
alert("Error while processing: " + error);
}
@guchokipa
Copy link

guchokipa commented Dec 1, 2018

Thank you so much for this small but great script.
I modified slightly to suit my requirements such as

1)included jpg
'''
if (child.name.slice(-4).toLowerCase() == ".png" || child.name.slice(-4).toLowerCase() == ".jpg") {
'''

2)thks for Otto's modification to escape from termination but I didn't want to stop the process even with an alart window so commented out the alert

3)message window to confirm the process finished
'''
alert("FINISHED");
'''

All worked well with my CS6 , 6000+consecutive files & sub-folders

@ogland
Copy link

ogland commented May 21, 2019

This is great but it crashes both photoshop 2018 and 2019 when attempting to compress JPEG. Any chances for a updated script?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment