Created
May 8, 2012 21:00
-
-
Save rochacbruno/2639248 to your computer and use it in GitHub Desktop.
thumbnails in web2py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: utf-8 -*- | |
| ####################################################################### | |
| # | |
| # Put this file in yourapp/modules/images.py | |
| # | |
| # Given the model | |
| # | |
| # db.define_table("table_name", Field("picture", "upload"), Field("thumbnail", "upload")) | |
| # | |
| # # to resize the picture on upload | |
| # | |
| # from images import RESIZE | |
| # | |
| # db.table_name.picture.requires = RESIZE(200, 200) | |
| # | |
| # # to store original image in picture and create a thumbnail in 'thumbnail' field | |
| # | |
| # from images import THUMB | |
| # db.table_name.thumbnail.compute = lambda row: THUMB(row.picture, 200, 200) | |
| ######################################################################### | |
| from gluon import current | |
| class RESIZE(object): | |
| def __init__(self, nx=160, ny=80, error_message=' image resize'): | |
| (self.nx, self.ny, self.error_message) = (nx, ny, error_message) | |
| def __call__(self, value): | |
| if isinstance(value, str) and len(value) == 0: | |
| return (value, None) | |
| from PIL import Image | |
| import cStringIO | |
| try: | |
| img = Image.open(value.file) | |
| img.thumbnail((self.nx, self.ny), Image.ANTIALIAS) | |
| s = cStringIO.StringIO() | |
| img.save(s, 'JPEG', quality=100) | |
| s.seek(0) | |
| value.file = s | |
| except: | |
| return (value, self.error_message) | |
| else: | |
| return (value, None) | |
| def THUMB(image, nx=120, ny=120, gae=False, name='thumb'): | |
| if image: | |
| if not gae: | |
| request = current.request | |
| from PIL import Image | |
| import os | |
| img = Image.open(request.folder + 'uploads/' + image) | |
| img.thumbnail((nx, ny), Image.ANTIALIAS) | |
| root, ext = os.path.splitext(image) | |
| thumb = '%s_%s%s' % (root, name, ext) | |
| img.save(request.folder + 'uploads/' + thumb) | |
| return thumb | |
| else: | |
| return image |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment