Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Ryan Burnside, force resize all JPGs in directory
- import multiprocessing as mp
- from glob import iglob
- import os
- from PIL import Image
- from time import time
- import argparse
- import logging
- #Args for commandline use
- MAX_WIDTH = 2048
- MAX_HEIGHT = 2048
- BYTES_PER_MB = 1048576
- BYTE_SKIP_THRESHOLD = BYTES_PER_MB * .2
- STARTING_PATH = "."
- NO_PROMPT = False
- parser = argparse.ArgumentParser()
- parser.add_argument("--directory", type=str,
- help="Set start directory. No trailing slash.",
- default = ".")
- parser.add_argument("--width", type=int,
- help="Set max width.",
- default = MAX_WIDTH)
- parser.add_argument("--height", type=int,
- help="Set max height.",
- default = MAX_HEIGHT)
- parser.add_argument("--ignore-below", type=int,
- help="Set ignore byte threshold.",
- default=BYTE_SKIP_THRESHOLD)
- parser.add_argument("--no-prompt", help="Run without prompting.",
- action="store_true")
- args = parser.parse_args()
- logging.basicConfig(filename='ConvertLog.txt',level=logging.WARNING)
- def assign_args():
- global STARTING_PATH
- global BYTE_SKIP_THRESHOLD
- global MAX_WIDTH
- global MAX_HEIGHT
- global NO_PROMPT
- BYTE_SKIP_THRESHOLD = args.ignore_below
- MAX_WIDTH = args.width
- MAX_HEIGHT = args.height
- STARTING_PATH = args.directory
- NO_PROMPT = args.no_prompt
- def promptYN(question):
- while True:
- a = input(question)
- if a.upper() in ("YES", "Y"):
- return True
- if a.upper() in ("NO", "N"):
- return False
- def resize_pic(name):
- try:
- if os.path.getsize(name) > BYTE_SKIP_THRESHOLD:
- im = Image.open(name)
- im.thumbnail((MAX_WIDTH, MAX_HEIGHT))
- im.save(name, "JPEG")
- except Exception as e:
- logging.warning(e)
- logging.warning(F"Error working with file {name}. Continuing on ...")
- print(e)
- print(F"Error working with file {name}. Continuing on ...")
- def dummy(name):
- print(name)
- if __name__ == '__main__':
- multiprocessing.freeze_support() # MUST BE CALLED HERE FOR WINDOWS
- assign_args()
- # See if their path is even valid
- if not os.path.isdir(STARTING_PATH):
- print(F"Path: {STARTING_PATH} is not valid. " +
- "(Did you need to strip trailing slashes?)")
- exit()
- # start worker processes
- CPUS = mp.cpu_count()
- pool = mp.Pool(CPUS)
- files = iglob(F"{STARTING_PATH}/**/*.JPG", recursive = True)
- print(F"Starting recursive conversions in {STARTING_PATH} .")
- print(F"Will attempt to use {CPUS} concurrent processes.")
- print(F"Image restraints: {MAX_WIDTH} x {MAX_HEIGHT}")
- print(F"Size restraints: {BYTE_SKIP_THRESHOLD} bytes.")
- if not NO_PROMPT:
- if not promptYN("Begin? Y/N: "):
- exit()
- start_time = time()
- pool.map(resize_pic, files)
- pool.close()
- end_time = time()
- print("Ending conversions")
- print(F"Took {(end_time - start_time) / 60.0} Minutes")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement