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()
--- 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,