Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to store an image into redis using python / PIL

I'm using python and the Image module(PIL) to process images.

I want to store the raw bits stream of the image object to redis so that others can directly read the images from redis using nginx & httpredis.

so, my question is how to get the raw bits of an Image object and store it into redis.

like image 217
Ace Avatar asked Dec 02 '22 20:12

Ace


1 Answers

Using PIL 1.1.7, redis-2.7.2 pip module, and redis-2.4.10 I was able to get this working:

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()

I found that Image.tostring was not reliable, so this method uses StringIO to make a string appear to be a file. The format=im.format is needed because StringIO doesn't have an "extension". I then tested the image data was saved okay by doing:

redis-cli --raw get 'imagedata' >test.png

and verifying I got back an image.

like image 145
cwgem Avatar answered Dec 15 '22 11:12

cwgem