Leonel, also, if you want to do some consulting, please let m know...
-Ron

On Sunday, March 1, 2015 at 1:14:41 PM UTC-5, Abhijit Chatterjee wrote:
>
> I put the "auth.settings.extra_fields..." in my model db.by and the rest 
> in my controller default.py.
>
> How do I now implement them. Any thoughts?
>
> On Thursday, February 26, 2015 at 8:04:27 PM UTC-5, Leonel Câmara wrote:
>>
>> It's not very hard, here's a possibility that requires you to have pillow 
>> <https://pillow.readthedocs.org/> installed.
>>
>>
>> auth.settings.extra_fields['auth_user'] = [
>>     Field('photo', 'upload', label=T('Photo'), uploadseparate=True, 
>> requires=[IS_EMPTY_OR(IS_IMAGE(error_message=T('This is not an image.'
>> ))), IS_LENGTH(maxsize=1048576)]),
>>     Field('avatar','upload', uploadseparate=True, readable=False, 
>> writable=False, autodelete=True, compute=lambda row: SMARTHUMB(
>> 'auth_user', row.photo, (32, 32), name='avatar')),
>> ]
>>
>>
>>
>> def upload_fullpath(tablename, filename, makedirs=False):
>>     """
>>     Given a tablename and a filename return the full path
>>     TODO: For now it assumes uploadseparate=True in the field definition,
>>           could be more versatile.
>>     """
>>     import os
>>     from gluon import current
>>     fieldname, img_uid = filename.split('.')[1:3]
>>     path = os.path.join(current.request.folder, 'uploads', tablename + 
>> '.' + fieldname, img_uid[:2], filename)
>>     if makedirs:
>>         try:
>>             os.makedirs(os.path.dirname(path))
>>         except OSError:
>>             print "Skipping creation of %s because it exists already." % 
>> os.path.dirname(path)
>>     return path
>>
>>
>> def SMARTHUMB(tablename, image, box, fit=True, name="thumbnail"):
>>     """
>>     Downsample the image.
>>     
>> http://www.web2pyslices.com/slice/show/1522/generate-a-thumbnail-that-fits-in-a-box
>>
>>     Modified to respect uploadseparate=True differences
>>
>>      @param img: Image -  an Image-object
>>      @param box: tuple(x, y) - the bounding box of the result image
>>      @param fit: boolean - crop the image to fill the box
>>     """
>>     if image:
>>         from PIL import Image
>>         import os
>>         from gluon.tools import current, web2py_uuid
>>         request = current.request
>>         img = Image.open(upload_fullpath(tablename, image))
>>         #preresize image with factor 2, 4, 8 and fast algorithm
>>         factor = 1
>>         while img.size[0] / factor > 2 * box[0] and img.size[1] * 2 / 
>> factor > 2 * box[1]:
>>             factor *= 2
>>         if factor > 1:
>>             img.thumbnail((img.size[0] / factor, img.size[1] / factor), 
>> Image.ANTIALIAS)
>>  
>>         #calculate the cropping box and get the cropped part
>>         if fit:
>>             x1 = y1 = 0
>>             x2, y2 = img.size
>>             wRatio = 1.0 * x2 / box[0]
>>             hRatio = 1.0 * y2 / box[1]
>>             if hRatio > wRatio:
>>                 y1 = int(y2 / 2 - box[1] * wRatio / 2)
>>                 y2 = int(y2 / 2 + box[1] * wRatio / 2)
>>             else:
>>                 x1 = int(x2 / 2 - box[0] * hRatio / 2)
>>                 x2 = int(x2 / 2 + box[0] * hRatio / 2)
>>             img = img.crop((x1, y1, x2, y2))
>>  
>>         #Resize the image with best quality algorithm ANTI-ALIAS
>>         img = img.resize(box, Image.ANTIALIAS)
>>  
>>         root, ext = os.path.splitext(image)
>>         thumbname = '%s.%s.%s.%s%s' % (tablename, name, web2py_uuid().
>> replace('-', '')[-16:], web2py_uuid().replace('-', '')[-16:], ext)
>>         img.save(upload_fullpath(tablename, thumbname, makedirs=True))   
>>      
>> ...
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to