Mercurial > hg > cropresize
changeset 5:c89738f3f417
* improve command line interface
* improve README
* bump version
author | k0s <k0scist@gmail.com> |
---|---|
date | Sat, 06 Mar 2010 14:55:04 -0500 |
parents | 6ec33e2ce60f |
children | 0cd9a1362310 |
files | README.txt cropresize/__init__.py setup.py |
diffstat | 3 files changed, 51 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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 <http://www.pythonware.com/products/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 <http://www.pythonware.com/library/pil/handbook/image.htm>`_ 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
--- 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()