Mercurial > hg > cropresize
changeset 0:0a54e5bd2875
initial import of cropresive from https://svn.openplans.org/svn/standalone/cropresize
author | k0s <k0scist@gmail.com> |
---|---|
date | Thu, 29 Oct 2009 18:28:13 -0400 |
parents | |
children | 0a2302b6377b |
files | cropresize/__init__.py setup.py |
diffstat | 2 files changed, 101 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cropresize/__init__.py Thu Oct 29 18:28:13 2009 -0400 @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +import sys +from PIL import Image + +def crop_resize(image, size, exact_size=False): + """ + Crop out the proportional middle of the image and set to the desired size. + If the image is bigger than the sizes passed, this works as expected. + If the image is smaller than the sizes passed, then behavior is dictated + by the `exact_size` flag. If the + + """ + assert size[0] or size[1] + + size = list(size) + + image_ar = image.size[0]/float(image.size[1]) + crop = size[0] and size[1] + if not size[1]: + size[1] = int(image.size[1]*size[0]/float(image.size[0]) ) + if not size[0]: + size[0] = int(image.size[0]*size[1]/float(image.size[1]) ) + size_ar = size[0]/float(size[1]) + + if size[0] > image.size[0]: + if size[1] > image.size[1]: + if not exact_size: + return image + else: + pass + # raise NotImplementedError + elif size[1] > image.size[1]: + pass + + if crop: + if image_ar > size_ar: + # trim the width + xoffset = int(0.5*(image.size[0] - size_ar*image.size[1])) + image = image.crop((xoffset, 0, image.size[0]-xoffset, image.size[1])) + elif image_ar < size_ar: + # trim the height + yoffset = int(0.5*(image.size[1] - image.size[0]/size_ar)) + image = image.crop((0, yoffset, image.size[0], image.size[1] - yoffset)) + + return image.resize(size, Image.ANTIALIAS) + +def main(): + from optparse import OptionParser + parser = OptionParser() + parser.add_option('-W', '--width') + parser.add_option('-H', '--height') + parser.add_option('-e', '--exact-size', dest='exact', action='store_true', default=False) + (options, args) = parser.parse_args() + + if not args: + parser.print_help() + sys.exit() + + width = int(options.width) + height = int(options.height) + + for arg in args: + image = Image.open(arg) + new_image = crop_resize(image, (width, height), options.exact) + new_image.show() + +if __name__ == '__main__': + main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/setup.py Thu Oct 29 18:28:13 2009 -0400 @@ -0,0 +1,32 @@ +from setuptools import setup, find_packages +import sys, os + +version = '0.1.1' + +setup(name='cropresize', + version=version, + description="crop and resize an image without doing the math yourself", + long_description="""\ +""", + classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + keywords='image', + author='Jeff Hammel', + author_email='jhammel@openplans.org', + url='http://pypi.python.org/pypi/cropresize', + license='GPL', + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + # -*- Extra requirements: -*- + 'PIL', + ], + dependency_links=[ + "http://dist.repoze.org/PIL-1.1.6.tar.gz", + ], + entry_points=""" + # -*- Entry points: -*- + [console_scripts] + crop-resize = cropresize:main + """, + )