diff --git a/image-converter/src/assets/100740-1471947265.jpg b/image-converter/src/assets/fee.jpg similarity index 100% rename from image-converter/src/assets/100740-1471947265.jpg rename to image-converter/src/assets/fee.jpg diff --git a/image-converter/src/assets/foo.png b/image-converter/src/assets/foo.png deleted file mode 100644 index b7e1992..0000000 Binary files a/image-converter/src/assets/foo.png and /dev/null differ diff --git a/image-converter/src/main.py b/image-converter/src/main.py index cec18b1..6b34af6 100644 --- a/image-converter/src/main.py +++ b/image-converter/src/main.py @@ -1,6 +1,26 @@ -from modules.raw_parser import (parse_raw_image) - +from modules.image_parser import (parse_image, parse_whole_directory) +from modules.argument_parser import (generate_argument_parser) +# NOTE: arguments +# -H : max height of vertical images +# -W : max width of horizontal images +# -e : extension of the output files +# -d : input directory path +# -f : file or list of files (paths) to parse +# -o : output directory path +# -h : help if __name__ == "__main__": - parse_raw_image("./src/assets/foo.CR2", 1900, "png") + arg_parser = generate_argument_parser() + args = arg_parser.parse_args() + + print(args, args.extension) + + # Parse directory + if (args.directory != None): + parse_whole_directory(args.directory, args.output, args.height, args.width, args.extension) + + # Parse individual files + if (args.files != None): + for file in args.files: + parse_image(file, args.output, args.height, args.width, args.extension) diff --git a/image-converter/src/modules/argument_parser.py b/image-converter/src/modules/argument_parser.py new file mode 100644 index 0000000..565ab2e --- /dev/null +++ b/image-converter/src/modules/argument_parser.py @@ -0,0 +1,11 @@ +import argparse + +def generate_argument_parser(): + parser = argparse.ArgumentParser(prog="Image Processor", description="A simple image format convert and resize tool.", epilog="Use any combination of arguments.") + parser.add_argument("-H", "--height", type=int, help="max height for vertical images") + parser.add_argument("-W", "--width", type=int, help="max width for horizontal images") + parser.add_argument("-e", "--extension", type=str, default="png",help="extension of the processed files") + parser.add_argument("-d", "--directory", type=str, help="directory of files to process") + parser.add_argument("-f", "--files", nargs="+", type=list, help="list of files to process") + parser.add_argument("-o", "--output", type=str, default="./",help="directory for the output files") + return parser diff --git a/image-converter/src/modules/image_parser.py b/image-converter/src/modules/image_parser.py new file mode 100644 index 0000000..088a8e6 --- /dev/null +++ b/image-converter/src/modules/image_parser.py @@ -0,0 +1,44 @@ +from PIL import Image + +import os +import math + +def parse_image(src: str, target_src: str, max_vertical_size_px: int, max_horizontal_size_px: int, target_extension: str): + if (src == None): + return + if (target_extension == None): + target_extension = "png" + rawImage = Image.open(src) + + if (rawImage.height > rawImage.width): + if (max_vertical_size_px == None or max_vertical_size_px < 1): + max_vertical_size_px = rawImage.height + target_height = max_vertical_size_px + target_width = math.ceil(rawImage.width * max_vertical_size_px / rawImage.height) + else: + if (max_horizontal_size_px == None or max_horizontal_size_px < 1): + max_horizontal_size_px = rawImage.width + target_width = max_horizontal_size_px + target_height = math.ceil(rawImage.height * max_horizontal_size_px / rawImage.width) + + rawImage = rawImage.resize((target_width, target_height)) + + filename = os.path.basename(src) + last_dot = filename.rfind(".") + filename = filename[:last_dot] + "." + target_extension + if (target_src == None): + target_src = os.path.abspath(os.path.dirname(src)) + else: + target_src = os.path.abspath(target_src) + full_path = os.path.join(target_src, filename) + print(">> Path: ", full_path) + # rawImage.save(full_path) + +def parse_whole_directory(dir_src: str, target_src: str, max_vertical_size_px: int, max_horizontal_size_px: int, target_extension: str): + for file_path in get_file_path_iter(dir_src): + parse_image(file_path,target_src, max_vertical_size_px, max_horizontal_size_px, target_extension) + +def get_file_path_iter(directory): + for dirpath,_,filenames in os.walk(directory): + for f in filenames: + yield os.path.abspath(os.path.join(dirpath, f)) diff --git a/image-converter/src/modules/raw_parser.py b/image-converter/src/modules/raw_parser.py deleted file mode 100644 index 7b3adfa..0000000 --- a/image-converter/src/modules/raw_parser.py +++ /dev/null @@ -1,17 +0,0 @@ -from PIL import Image -import math - -def parse_raw_image(src: str, max_size_px: int, target_extension: str): - rawImage = Image.open(src) - - if (rawImage.height > rawImage.width): - target_height = max_size_px - target_width = math.ceil(rawImage.width * max_size_px / rawImage.height) - else: - target_width = max_size_px - target_height = math.ceil(rawImage.height * max_size_px / rawImage.width) - rawImage = rawImage.resize((target_width, target_height)) - - last_dot = src.rfind(".") - result_path = src[:last_dot] - rawImage.save(result_path + "." + target_extension)