Mercurial > hg > montage
view montage/utils.py @ 0:b7348ffe5b46
initial import of montage
author | k0s <k0scist@gmail.com> |
---|---|
date | Mon, 07 Sep 2009 15:38:38 -0400 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python import os from PIL import Image def crop_resize(image, size): """crop out the proportional middle of the image and set to the desired size""" assert size[0] or size[1] size = list(size) if size[0] > image.size[0]: return image if size[1] > image.size[1]: return image image_ar = image.size[0]/float(image.size[1]) crop = not size[0] or not 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 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) if __name__ == '__main__': from optparse import OptionParser parser = OptionParser() parser.add_option('-f', '--file') parser.add_option('-W', '--width') parser.add_option('-H', '--height') (options, args) = parser.parse_args() assert os.path.exists(options.file) i = Image.open(options.file) new_image = crop_resize(i, (int(options.width), int(options.height))) new_image.show()