Mercurial > hg > cropresize
view cropresize/__init__.py @ 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 | 6ec33e2ce60f |
line wrap: on
line source
#!/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()