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
def createAvatar(self): avatar = Avatar(mime='image/png', base64=self.avatar_data, sha1='55890c9b2e992ada2f05cb07792f3f49347db1b5') avatar.save() return avatar