Usando o módulo PIL 1.1.7, redis-2.7.2 pip e redis-2.4.10, consegui fazer isso funcionar:
import Image
import redis
import StringIO
output = StringIO.StringIO()
im = Image.open("/home/cwgem/Pictures/portrait.png")
im.save(output, format=im.format)
r = redis.StrictRedis(host='localhost')
r.set('imagedata', output.getvalue())
output.close()
Descobri que
Image.tostring
não era confiável, então este método usa StringIO
para fazer uma string parecer um arquivo. O format=im.format
é necessário porque StringIO
não tem uma "extensão". Eu então testei os dados da imagem foram salvos bem fazendo:redis-cli --raw get 'imagedata' >test.png
e verificando se recebi de volta uma imagem.