From 485a2352c3a0cf5da1ce41361063e1bc28772986 Mon Sep 17 00:00:00 2001 From: vikingowl Date: Fri, 28 Jan 2022 12:16:31 +0100 Subject: [PATCH] added webp conversion --- CompressResizeImages.py | 113 +++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 65 deletions(-) diff --git a/CompressResizeImages.py b/CompressResizeImages.py index b38f0f9..ba21409 100755 --- a/CompressResizeImages.py +++ b/CompressResizeImages.py @@ -14,63 +14,42 @@ def compressor(file, final_path, quality, resize, size): # open image with Image.open(filepath) as image: - # resize and compress landscape images - if resize and image.width >= size and image.width >= image.height: - # resize - print('resizing: ' + file) - cover = resizeimage.resize_width(image, size) - # convert to 8 bit (if possible) - print('converting to 8 bit: ' + file) - if cover.format in ['JPG', 'JPEG']: - # TODO: JPG + JPEG are not converted to 8 bit - cover = cover.quantize(colors=256, method=2).convert("RGB") - else: - cover = cover.quantize(colors=256, method=2) - # compress and save - print('compressing: ' + file) - cover.save( - str(final_path) + '/' + 'min-' + file, - image.format, - optimize=True, - quality=quality, - ) - # resize and compress portrait images - elif resize and image.height >= size and image.height >= image.width: - # resize - print('resizing: ' + file) - cover = resizeimage.resize_height(image, size) - # convert to 8 bit (if possible) - print('converting to 8 bit: ' + file) - if cover.format in ['JPG', 'JPEG']: - # TODO: JPG + JPEG are not converted to 8 bit - cover = cover.quantize(colors=256, method=2).convert("RGB") - else: - cover = cover.quantize(colors=256, method=2) - # compress and save - print('compressing: ' + file) - cover.save( - str(final_path) + '/' + 'min-' + file, - image.format, - optimize=True, - quality=quality, - ) - # compress images + cover = image + # resize + if resize: + print('resizing:' + file) + if cover.width >= size and cover.width >= cover.height: + cover = resizeimage.resize_width(cover, size) + elif cover.height >= size and cover.height >= cover.width: + cover = resizeimage.resize_height(cover, size) + + # convert to 8 bit (if possible) + print('converting to 8 bit: ' + file) + if cover.format in ['JPG', 'JPEG']: + # TODO: JPG + JPEG are not converted to 8 bit + cover = cover.quantize(colors=256, method=2).convert("RGB") else: - # convert to 8 bit (if possible) - print('converting to 8 bit: ' + file) - if image.format in ['JPG', 'JPEG']: - # TODO: JPG + JPEG are not converted to 8 bit - image = image.quantize(colors=256, method=2).convert("RGB") - else: - image = image.quantize(colors=256, method=2) - # compress and save - print('compress: ' + file) - image.save( - str(final_path) + "/" + "min-" + file, - image.format, - optimize=True, - quality=quality, - ) + cover = cover.quantize(colors=256, method=2) + + # compress and save + print('compressing: ' + file) + cover.save( + str(final_path) + '/' + 'min-' + file, + image.format, + optimize=True, + quality=quality, + ) + + +def convert_to_webp(file, final_path): + filepath = os.path.join(final_path, file) + + with Image.open(filepath) as image: + print('converting to webp: ' + file) + image.save( + str(final_path) + '/' + os.path.splitext(file)[0] + '.webp', + format="WEBP" + ) def usage(): @@ -78,6 +57,7 @@ def usage(): print('Compress and optionally resize all images (jpg|jpeg|png|webp|gif) in the current folder') print(' -h | --help Prints this help') print(' -r | --resize Set this to resize the images') + print(' -c | --convert Set this to convert images to WEBP') print(' -q | --quality QUALITY Specify the quality (1-100, default 80)') print(' -s | --size SIZE Specify the size of the long side (default 900)') @@ -85,7 +65,7 @@ def usage(): def main(argv): # save arguments and options to variables try: - opts, args = getopt.getopt(argv, 'hrq:s:', ['help', 'resize', 'quality=', 'size=']) + opts, args = getopt.getopt(argv, 'hrcq:s:', ['help', 'resize', 'convert', 'quality=', 'size=']) except getopt.GetoptError as err: print(err) usage() @@ -94,6 +74,7 @@ def main(argv): # default values quality_img = 80 resize = False + convert = False size = 900 # parse arguments @@ -102,13 +83,12 @@ def main(argv): usage() sys.exit() elif o in ('-r', '--resize'): - print(o) resize = True + elif o in ('-c', '--convert'): + convert = True elif o in ('-q', '--quality'): - print(o, a) quality_img = int(a) elif o in ('-s', '--size'): - print(o, a) size = int(a) else: assert False, 'unhandled option' @@ -120,7 +100,7 @@ def main(argv): try: # if save directory exists - if 'compress' in os.listdir(): + if directory_name in os.listdir(): pass else: # if save directory does not exist @@ -129,16 +109,19 @@ def main(argv): except Exception as e: print(e) - # only support these 4 formats - formats = ('.jpg', '.jpeg', '.png', '.webp', '.gif') - # get all files for file in os.listdir(os.getcwd()): # check file and compress file - if os.path.splitext(file)[1].lower() in formats: + if os.path.splitext(file)[1].lower() in ('.jpg', '.jpeg', '.png', '.webp', '.gif'): # call compress function compressor(file, final_path, quality_img, resize, size) + # convert to webp + if convert: + for file in os.listdir(final_path): + if os.path.splitext(file)[1].lower() in ('.jpg', '.jpeg', '.png', '.gif'): + convert_to_webp(file, final_path) + print("Done")