From 9b126f6c6a3c840a78b8443983e6e91d7c00dec2 Mon Sep 17 00:00:00 2001 From: Alexander Demidov Date: Fri, 29 Nov 2013 14:46:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20resize.py=20?= =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crop.jpg | Bin 13086 -> 0 bytes resize.py | 62 ++++++++++++++++++++++++++++++++------------------------- square.py | 13 ------------ test_resize.sh | 11 ++++++++++ thumbnail.jpg | Bin 10683 -> 0 bytes 5 files changed, 46 insertions(+), 40 deletions(-) delete mode 100644 crop.jpg delete mode 100755 square.py create mode 100755 test_resize.sh delete mode 100644 thumbnail.jpg diff --git a/crop.jpg b/crop.jpg deleted file mode 100644 index b239da7518e59161ec7009c950cb23fd2a4392ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13086 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 L>i!jeIsZQZpmYXz diff --git a/resize.py b/resize.py index 0730a11..40b75bd 100755 --- a/resize.py +++ b/resize.py @@ -4,43 +4,51 @@ import os, sys from PIL import Image from PIL import ImageEnhance import argparse +CROP_DEFAULT = 'default' +CROP_WHITESPACE = 'whitespace' parser = argparse.ArgumentParser() -parser.add_argument("--width", dest="width", type=int, required=True) -parser.add_argument("--height", dest="height", type=int, required=True) -parser.add_argument("--crop", action="store_true", required=False) -parser.add_argument("--keep-aspect-ratio", dest="keep_aspect_ratio", action="store_true", required=False) +parser.add_argument("--width", type=int) +parser.add_argument("--height", type=int) +parser.add_argument("--crop", choices=[CROP_WHITESPACE, CROP_DEFAULT]) +parser.add_argument("--enhance", action="store_true") parser.add_argument("source", type=str) parser.add_argument("destination", type=str) args = parser.parse_args() -size = args.width, args.height infile = args.source outfile = args.destination try: im = Image.open(infile) im = im.convert() - if args.crop: - width_crop = im.size[0] - height_crop = int(im.size[0]/(args.width/args.height)) - width_padding = 0 - height_padding = int((im.size[1]-height_crop)/2) - if height_crop > im.size[1]: - width_crop = int(im.size[1]/(args.height/args.width)) - height_crop = im.size[1] - width_padding = int((im.size[0]-width_crop)/2) - height_padding = 0 - print((width_padding, height_padding, width_crop+width_padding, height_crop+height_padding)) - im_crop = im.crop((width_padding, height_padding, width_crop+width_padding, height_crop+height_padding)) - im_result = im_crop.resize(size, Image.ANTIALIAS) - else: - im.thumbnail(size, Image.ANTIALIAS) - if args.keep_aspect_ratio: - im_result = im + if args.width is not None or args.height is not None: + if args.width is None: + size = (int(im.size[0] * args.height / im.size[1]), args.height) + elif args.height is None: + size = (args.width, int(im.size[1] * args.width / im.size[0])) else: - im_result = Image.new('RGB', (args.width, args.height), (255, 255, 255)) - im_result.paste(im, ((args.width - im.size[0]) / 2, (args.height - im.size[1]) / 2)) - enhancer = ImageEnhance.Contrast(im_result) - im_result = enhancer.enhance(1.05) - im_result.save(outfile, "JPEG", quality=100) + size = (args.width, args.height) + if args.crop: + if args.crop == CROP_DEFAULT: + width_crop = im.size[0] + height_crop = int(im.size[0]/(size[0]/size[1])) + x = 0 + y = int((im.size[1]-height_crop)/2) + if height_crop > im.size[1]: + width_crop = int(im.size[1]/(size[1]/size[0])) + height_crop = im.size[1] + x = int((im.size[0]-width_crop)/2) + y = 0 + im = im.crop((x, y, width_crop+x, height_crop+y)) + im.thumbnail(size, Image.ANTIALIAS) + if args.crop == CROP_WHITESPACE: + im_whitespace = Image.new('RGB', (size[0], size[1]), (255, 255, 255)) + im_whitespace.paste(im, ((size[0] - im.size[0]) // 2, (size[1] - im.size[1]) // 2)) + im = im_whitespace + else: + im.thumbnail(size, Image.ANTIALIAS) + if args.enhance: + enhancer = ImageEnhance.Contrast(im) + im = enhancer.enhance(1.05) + im.save(outfile, "JPEG", quality=100) except IOError: print("cannot create thumbnail for '%s'" % infile) diff --git a/square.py b/square.py deleted file mode 100755 index 9dec1f6..0000000 --- a/square.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python -import argparse -parser = argparse.ArgumentParser() -parser.add_argument("square", type=int, - help="display a square of a given number") -parser.add_argument("-v", "--verbose", action="store_true", - help="increase output verbosity") -args = parser.parse_args() -answer = args.square**2 -if args.verbose: - print("the square of {} equals {}".format(args.square, answer)) -else: - print(answer) \ No newline at end of file diff --git a/test_resize.sh b/test_resize.sh new file mode 100755 index 0000000..70d98f9 --- /dev/null +++ b/test_resize.sh @@ -0,0 +1,11 @@ +#!/bin/sh +./resize.py --width=100 origin.jpg resize_w100.jpg +./resize.py --width=100 --crop default origin.jpg resize_w100_crop.jpg +./resize.py --width=100 --crop whitespace origin.jpg resize_w100_crop_whitespace.jpg +./resize.py --height=100 origin.jpg resize_h100.jpg +./resize.py --height=100 --crop default origin.jpg resize_h100_crop.jpg +./resize.py --height=100 --crop whitespace origin.jpg resize_h100_crop_whitespace.jpg +./resize.py --width=100 --height=100 origin.jpg resize_w100_h100.jpg +./resize.py --width=100 --height=100 --crop default origin.jpg resize_w100_h100_crop.jpg +./resize.py --width=100 --height=100 --crop whitespace origin.jpg resize_w100_h100_crop_whitespace.jpg +./resize.py --enhance origin.jpg enhance.jpg \ No newline at end of file diff --git a/thumbnail.jpg b/thumbnail.jpg deleted file mode 100644 index 6ce539ea62f162d48399b5625bc65b8cf562c1bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10683 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