Skip to content

Instantly share code, notes, and snippets.

@rolftimmermans
Created June 25, 2014 14:24
Show Gist options
  • 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);
}
@Seanrc
Copy link

Seanrc commented Jul 29, 2017

When I used this script last year it compressed files in subfolders within subfolders. It's no longer doing that. Maybe a change in Photoshop CC 2017 or in the TinyPNG plugin itself? It runs through the files in these subfolders but does not compress them.

@Flatlinezor
Copy link

Any chance of success to have a JPG compatible version of this please?

@eurorincon
Copy link

Excelente!!! @rolftimmermans

Muchas gracias, funciona muy bien!!! 👍
lo estoy usando en Photoshop 2018 y ya tengo el plugin instalado.
nuevamente muchas gracias.

Excellent!!! @rolftimmermans
Thank you very much, it works very well !!! 👍
I'm using it in Photoshop 2018 and I already have the plugin installed.
again thank you very much.

@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