From 0bf39e2cd773730dffddde28db88fa53339da5fb Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Sat, 18 Mar 2017 17:34:12 +0100 Subject: [PATCH] First commit --- README.md | 22 ++++++++++++++++++++++ guetzli-recursively.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 README.md create mode 100644 guetzli-recursively.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..870dd59 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ + +Guetzli is a Google program to optimize JPEG images. Unfortunately, it only works one file at a time. With this script in Python you can do it recursively a whole folder. + +# Install + +Guetzli must be installed on your system. Follow the official instructions. +[Guetzli](https://github.com/google/guetzli) + +and Python 3. + +# Use + +```bash +python guetzli-recursively.py [folder] +``` + +Example + +```bash +python guetzli-recursively.py img +``` + diff --git a/guetzli-recursively.py b/guetzli-recursively.py new file mode 100644 index 0000000..aad88db --- /dev/null +++ b/guetzli-recursively.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +from os import path, walk, remove, rename +from subprocess import call +from sys import argv +top_dir = argv[1] +TEMP_FILE = 'temp.jpg' +extensions = ('jpeg', 'jpg') + +for dirpath, dirnames, files in walk(top_dir): + for name in files: + for extension in extensions: + if name.lower().endswith(extension): + # Get urls + url = path.join(dirpath, name) + print(url) + url_out = path.join(top_dir, TEMP_FILE) + # Remove temp image + try: + remove(url_out) + except: + pass + # Execute guetzli + call(['guetzli', url, url_out]) + # Print your have saved + size_source = path.getsize(url) + try: + size_out = path.getsize(url_out) + except: + size_out = size_source + size_acurate = 100 * size_out / size_source + # Remove source + try: + remove(url) + except: + pass + if size_acurate < 100: + # Move temp to source + rename(url_out, url) + print('Save ' + str(100 - size_acurate) + '%') + else: + print('It is not necessary to optimize')