示例#1
0
文件: views.py 项目: smazor/Speeqe
def lookup(request):
    default_sha1 = settings.AVATAR_DEFAULT_SHA1
    default_ie6  = settings.AVATAR_DEFAULT_IE6

    default = default_sha1 + '|'+settings.AVATAR_DEFAULT_DIMENSIONS
    ie6 = request.GET.get('ie6', 'no')
    mime = 'image/png'
    if request.method == 'POST':
        b64 = ''
        try:
            b64 = request.POST.get('base64', '')
        except IOError:
            pass
        mime = request.POST.get('mime', '')
        output = default
        if b64 != '' and clean_mime(mime) in ['bmp', 'gif', 'jpg', 'jpeg', 'png']:
            try:
                sha1 = sha.sha(base64.decodestring(b64)).hexdigest()
                output = sha1
                im_dimensions = cache.get('%s_size' % sha1)

                if not im_dimensions:
                    cache.set('%s_b64_large'  % sha1, b64, settings.AVATAR_CACHE_TIMEOUT)
                    cache.set('%s_mime' % sha1, mime, settings.AVATAR_CACHE_TIMEOUT)
                    try:
                        av = Avatar.objects.get(sha1=sha1)
                        cache.set('%s_size' % sha1, av.size, settings.AVATAR_CACHE_TIMEOUT)
                        output = '%s|%s' % (output, av.size)
                    except:
                        image_data = base64.decodestring(b64)
                        im = Image.open(StringIO.StringIO(image_data))
                        im, resized = resize_image(im, 300, 300)
                        im_dimensions = '%d|%d' % im.size
                        cache.set('%s_size' % sha1, im_dimensions, settings.AVATAR_CACHE_TIMEOUT)
                        av = Avatar(base64=b64, sha1=sha1, mime=mime, size=im_dimensions)
                        output = '%s|%s' % (output, im_dimensions)
                    av.save()
                else:
                    output = '%s|%s' % (output, im_dimensions)
            except:
                pass

        resp = HttpResponse(output)
        resp['Content-Type'] = 'text/plain'
        return resp
    else:

        dimensions = request.GET.get('dimensions', settings.AVATAR_DEFAULT_DIMENSIONS)
        b64 = None
        sha1 = None
        expires = (datetime.utcnow() + timedelta(hours=1)).strftime('%a, %d %b %Y %T GMT')

        sha1 = request.GET.get('sha1', default.split('|')[0])
        
        if sha1 == default and ie6 == 'yes':
            sha1 = default_ie6
        if not re.match('^[0-9a-fA-F]+$', sha1):
            sha1 = default.split('|')[0];

        mime, b64 = get_avatar(sha1, ie6)
        try:
            image_data = base64.decodestring(b64)
        except Exception, ex:
            request.logger.error("Error finding avatar: %s - %s" % (sha1, ex))
            mime, b64 = get_avatar(None, ie6)
            if b64:
                image_data = base64.decodestring(b64)
            else:
                #if there still is an error, return a blank avatar
                image_data = ""

        im = None
        try:
            im = Image.open(StringIO.StringIO(image_data))
        except IOError:
            mime, b64 = get_avatar(None,default)
            image_data = base64.decodestring(b64)
            im = Image.open(StringIO.StringIO(image_data))

        (new_width, new_height) = [int(x) for x in dimensions.split('|')]
        im, resized = resize_image(im, new_height, new_width)

        im_out = StringIO.StringIO(image_data)
        if resized:
            im.save(im_out, 'PNG')
        else:
            mime, b64 = get_avatar(None,default)
            image_data = base64.decodestring(b64)
            im = Image.open(StringIO.StringIO(image_data))
            im, resized = resize_image(im, new_height, new_width)

            im_out = StringIO.StringIO(image_data)
            im.save(im_out, 'PNG')

        ret_image_data = im_out.getvalue()

        resp = HttpResponse(ret_image_data)
        resp['Content-Type'] = mime
        resp['Expires'] = expires
        return resp
示例#2
0
 def createAvatar(self):
     avatar = Avatar(mime='image/png',
                     base64=self.avatar_data,
                     sha1='55890c9b2e992ada2f05cb07792f3f49347db1b5')
     avatar.save()
     return avatar
示例#3
0
文件: tests.py 项目: 808banger/Speeqe
 def createAvatar(self):
     avatar = Avatar(mime='image/png',
                     base64=self.avatar_data,
                     sha1='55890c9b2e992ada2f05cb07792f3f49347db1b5')
     avatar.save()
     return avatar