import md5
from django.http import HttpResponse, HttpResponseNotModified, HttpResponseForbidden
import Image, ImageFont, ImageDraw
from django.conf import settings
def text_to_image(request, fontalias, orientation, size=20):
orientationmap = {'normal': 0, 'left': 90, 'right': 270}
fontmap = {
'vera': "VeraSe.ttf",
'pixel': "Pixel.ttf",
}
try:
orientation = orientationmap[orientation]
except KeyError:
return HttpResponseForbidden("unsupported orientation")
try:
fontfile = settings.MEDIA_ROOT + 'ttf/' + fontmap[fontalias]
except KeyError:
return HttpResponseForbidden("font alias not supported")
if request.GET.has_key('text') and len(request.GET['text']):
header = request.GET['text']
else:
header = 'I fart in your general direction'
if request.GET.has_key('size'):
try:
size = int(request.GET['size'])
except:
pass
etag = md5.new(header + fontalias).hexdigest()
if request.META.get("HTTP_IF_NONE_MATCH") == etag:
return HttpResponseNotModified()
palette = [
0,0,0, #0 black
255,255,255 #1 white
]
imf = ImageFont.truetype(fontfile, size)
size = imf.getsize(header)
im = Image.new("P", size, color=1)
im.putpalette(palette)
draw = ImageDraw.Draw(im)
draw.text((0, 0), header, font=imf, fill=0)
response = HttpResponse(mimetype="image/gif")
im = im.rotate(orientation)
im.save(response, "GIF", transparency=1)
response["ETag"] = etag
return response
Comments
django-rendertext is based on this snippet.
#
Alternative implementations:
#
django-cairo-text is a re-usable app based on code from Andrew Godwin's blog post.
#
Various people all over the world get the [HTML_REMOVED]credit loans[HTML_REMOVED] in various creditors, because that is easy and fast.
#