def check_mozjpeg_binary(): try: mozjpeg.check_binary() logger.info('mozjpeg binary found.') except subprocess.CalledProcessError as e: logger.error('mozjpeg binary not found.') exit(1)
def check_working_directory(directory): if os.path.exists(directory) and os.path.isdir(directory): logger.info('Working directory: %s' % directory) elif os.path.isfile(directory): logger.error('Working directory is not a valid directory (%s)' % directory) exit(2) else: logger.error('Working directory does not exist (%s)' % directory) exit(2)
def _list_filenames(directory): logger.info('Listing files...') filenames = glob.glob('%s/*.*' % directory, recursive=True) filenames = sorted(filenames) after_filename = parse_args().after if after_filename: after_filename = '%s/%s' % (directory, after_filename) try: after_filename_position = filenames.index(after_filename) filenames = filenames[after_filename_position + 1:] except ValueError: logger.error('Filename « %s » do not exists.' % after_filename) exit(1) return filenames
def optimize_images_from_directory(directory): handled_images = 0 handled_images_success = 0 handled_images_errors = 0 filenames = _list_filenames(directory) filenames_len = len(filenames) for filename in filenames: handled_images += 1 try: _optimize_image(filename) handled_images_success += 1 except Exception: logger.exception('An error occurred during optimization') handled_images_errors += 1 logger.info('Handled %d images on %d, with %d success and %d fails' % (handled_images, filenames_len, handled_images_success, handled_images_errors))
def _optimize_non_jpeg_image(filename): logger.info('Optimizing « %s » with Pillow...' % filename) pillow.optimize(filename) fix_permissions(filename)
def _optimize_jpeg(filename): logger.info('Optimizing « %s » with mozjpeg...' % filename) mozjpeg.optimize(filename) fix_permissions(filename)