Skip to content

Instantly share code, notes, and snippets.

@julianxhokaxhiu
Last active April 15, 2024 22:49
Show Gist options
  • Save julianxhokaxhiu/c0a8e813eabf9d6d9873 to your computer and use it in GitHub Desktop.
Save julianxhokaxhiu/c0a8e813eabf9d6d9873 to your computer and use it in GitHub Desktop.
Recursively optimize all PNG and JPG files wherever they are from the script position and inner ( based on OPTING, PNGCRUSH, ADVANCECOMP and JPEGOPTIM )
#!/bin/bash
# Improved as per feedback from @pascal - https://gist.github.com/julianxhokaxhiu/c0a8e813eabf9d6d9873#gistcomment-3086462
find . -type f -iname "*.png" -exec optipng -nb -nc {} \;
find . -type f -iname "*.png" -exec advpng -z4 {} \;
find . -type f -iname "*.png" -exec pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow {} \;
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim -f --strip-all {} \;
@mkormendy
Copy link

Oh, and instead of using \( -iname "*.jpg" -o -iname "*.jpeg" \) .. you can simply just use -iregex .*\.jpe?g$ in place.

@pduchnovsky
Copy link

pduchnovsky commented Nov 9, 2020

Improved script that actually runs even if file optimg.flag is not created yet.
Also ignores specific directories if needed

https://gist.github.com/pduchnovsky/9544ea3447b48c65c2412f7d5aef1f7a

@mskochev
Copy link

Thanks for the nice scripts. Is there a way to run them multithreaded?

@uPagge
Copy link

uPagge commented Feb 26, 2021

@pduchnovsky why are you using the -f flag in jpegoptim. For me it increases the size of the images if they have already been optimized better. Everything works much better without it.

@pduchnovsky
Copy link

pduchnovsky commented Feb 27, 2021

@pduchnovsky why are you using the -f flag in jpegoptim. For me it increases the size of the images if they have already been optimized better. Everything works much better without it.

I mean, this was in original script so I re-used it, but I wonder it might have something to do with using progressive optimization as well as stripping all metadata, which possibly would not happen if it's not forced and the file is already smaller.
Basically ensures that all of your files are optimized the same way.

@julianxhokaxhiu
Copy link
Author

Basically ensures that all of your files are optimized the same way.

Yes that was the case, nevertheless as things move forward, if there's a better way to tweak this script, I'm open to update it. Let me know what needs to be updated, and I'll do accordingly :)

Thanks to everyone coming here and saying hi, I appreciate any feedback and I'm glad you find this useful. Most of the time I do create gists for myself as a reminder for the future, but I'm glad others find it useful too.

@greg-randall
Copy link

Unless you're using the AdvanceMame emulator to generate PNGs you can skip the advpng line. https://linux.die.net/man/1/advpng

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