# HG changeset patch # User k0s # Date 1267905304 18000 # Node ID c89738f3f417d61f03230c8e7bc7b690eae544b1 # Parent 6ec33e2ce60fc6eeaf3099d12598aaaad1dd5dea * improve command line interface * improve README * bump version diff -r 6ec33e2ce60f -r c89738f3f417 README.txt --- a/README.txt Sat Mar 06 13:22:31 2010 -0500 +++ b/README.txt Sat Mar 06 14:55:04 2010 -0500 @@ -1,7 +1,8 @@ cropresize ========== -cropresize uses PIL to crop and resize an image as appropriate for web +cropresize uses `PIL `_ +to crop and resize an image as appropriate for web presentation. cropresize is a convenience package that allows image resizing without aspect ratio distortion. @@ -11,7 +12,7 @@ cropresize contains one useful function, ``cropresize.crop_resize``. The function takes three arguments: - * image: a PIL image object + * image: a `PIL image `_ object * size: a 2-tuple of (width,height); at least one must be specified * exact_size: whether to scale up for smaller images @@ -26,6 +27,15 @@ package. The help for the program is displayed by running ``crop-resize`` with no arguments or ``crop-resize --help``. + +Future Work +----------- + +cropresize is written as a convenience function to PIL as this +methodology for cropping and resizing images is often desired for +presentation, particularly on the web. Since the utility is in +demand, the functionality should be ported upstream to PIL. + -- http://k0s.org/portfolio/software.html#cropresize diff -r 6ec33e2ce60f -r c89738f3f417 cropresize/__init__.py --- a/cropresize/__init__.py Sat Mar 06 13:22:31 2010 -0500 +++ b/cropresize/__init__.py Sat Mar 06 14:55:04 2010 -0500 @@ -15,7 +15,7 @@ the image will be returned unmodified. If the ``exact_size`` flag is true, the image will be scaled up to the required size. """ - assert size[0] or size[1] + assert size[0] or size[1], "Must provide a width or a height" size = list(size) @@ -52,22 +52,53 @@ def main(): from optparse import OptionParser parser = OptionParser('%prog [options] image1.png [image2.jpg] [...]') - parser.add_option('-W', '--width') - parser.add_option('-H', '--height') - parser.add_option('-e', '--exact-size', dest='exact', action='store_true', default=False) + parser.add_option('-W', '--width', + help="desired width of image in pixels") + parser.add_option('-H', '--height', + help="desired height of image in pixels") + parser.add_option('-e', '--exact-size', dest='exact', + action='store_true', default=False, + help="scale up images smaller than specified") + parser.add_option('-d', '--display', dest='display', + action='store_true', default=False, + help="display the resized images (don't write to file)") + parser.add_option('-O', '--file', dest='output', + help="output to a file, stdout otherwise [1 image only]") (options, args) = parser.parse_args() + # print arguments if files not given if not args: parser.print_help() sys.exit() - width = int(options.width) - height = int(options.height) + # get the desired size + try: + width = int(options.width) + except TypeError: + width = None + try: + height = int(options.height) + except TypeError: + height = None + # asser that we have something to do with the image + if not options.display: + if len(args) > 1: + raise NotImplementedError # XXX + + # resize the images for arg in args: image = Image.open(arg) new_image = crop_resize(image, (width, height), options.exact) - new_image.show() + if options.display: + new_image.show() + else: + if len(args) == 1: + # output + if options.output: + new_image.save(options.output) + else: + sys.stdout.write(new_image.tostring(image.format)) if __name__ == '__main__': main() diff -r 6ec33e2ce60f -r c89738f3f417 setup.py --- a/setup.py Sat Mar 06 13:22:31 2010 -0500 +++ b/setup.py Sat Mar 06 14:55:04 2010 -0500 @@ -7,7 +7,7 @@ except: description = '' -version = '0.1.3' +version = '0.1.4' setup(name='cropresize', version=version,