from gluon import current
import os
try:
    from PIL import Image
except:
    import Image

def SMARTHUMB(image, box, fit=True, name="thumb"):
    '''Downsample the image.
    @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:
        request = current.request
        image_dir =
*current.db.auth_user.image.retrieve_file_properties(image)['path']
#__find_image_dir__(image, os.path.join(request.folder, 'uploads'))*
        img = Image.open(os.path.join(image_dir, 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.NEAREST)

        #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.thumbnail(box, Image.ANTIALIAS)

        root, ext = os.path.splitext(image)
        thumb = '%s_%s%s' % (root, name, ext)
        img.save(os.path.join(image_dir,thumb))
    return thumb


On Fri, Jul 12, 2013 at 11:47 AM, Richard Vézina <
[email protected]> wrote:

>
> db.table.image_field.retrieve_file_properties(db.table_iamge_field(id).image_field)['path']
>
> Just not sure I can get file_properties in compute...
>
> Richard
>
>
> On Fri, Jul 12, 2013 at 11:34 AM, Richard Vézina <
> [email protected]> wrote:
>
>> Think this is helpful :
>>
>> retrieve_file_properties
>>
>> https://groups.google.com/forum/#!topic/web2py/p1W1cSKLjfc
>> https://groups.google.com/d/msg/web2py/epWzBU9sD_c/naBEfJ4t18sJ
>>
>> Richard
>>
>>
>>
>> On Fri, Jul 12, 2013 at 11:04 AM, Richard <[email protected]>wrote:
>>
>>> Hello,
>>>
>>> I would like to know how I can get the folder name on
>>> uploadseparate=True in order to pass it to the to the thumbnail generating
>>> function base on Bruno slice :
>>> http://www.web2pyslices.com/slice/show/1522/generate-a-thumbnail-that-fits-in-a-box
>>>
>>> We already found a workaround with os.walk, but with greate amount of
>>> folder it will come slow with time :
>>>
>>> #!/usr/bin/env python
>>> # coding: utf8
>>>
>>> from gluon import current
>>> import os
>>> try:
>>>     from PIL import Image
>>> except:
>>>     import Image
>>>
>>> def SMARTHUMB(image, box, fit=True, name="thumb"):
>>>     '''Downsample the image.
>>>     @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:
>>>         request = current.request
>>>         image_dir = __find_image_dir__(image,
>>> os.path.join(request.folder, 'uploads'))
>>>         img = Image.open(os.path.join(image_dir, 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.NEAREST)
>>>
>>>         #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.thumbnail(box, Image.ANTIALIAS)
>>>
>>>         root, ext = os.path.splitext(image)
>>>         thumb = '%s_%s%s' % (root, name, ext)
>>>         img.save(os.path.join(image_dir,thumb))
>>>     return thumb
>>>
>>> def __find_image_dir__(name, path):
>>>     for root, dirs, files in os.walk(path):
>>>         if name in files:
>>>             return root
>>>
>>> Thanks
>>>
>>> Richard
>>>
>>> --
>>>
>>> ---
>>> 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/groups/opt_out.
>>>
>>>
>>>
>>
>>
>

-- 

--- 
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/groups/opt_out.


Reply via email to