2013-03-05 24 views
4

我正在使用python和图像模块(PIL)来处理图像。如何使用python/PIL将图像存储到redis

我想将图像对象的原始位流存储到redis,以便其他人可以使用nginx & httpredis直接读取来自redis的图像。

所以,我的问题是如何获取图像对象的原始位,并将其存储到redis中。

回答

13

使用PIL 1.1.7,Redis的-2.7.2 PIP模块和Redis的-2.4.10我能得到这个工作:

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

我发现Image.tostring是不可靠的,因此这种方法使用StringIO使字符串显示为文件。需要format=im.format是因为StringIO没有“扩展名”。然后我测试了保存的图像数据可以通过这样做:

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

并验证我找回了图像。

+0

非常感谢,让我试试... – Ace 2013-03-05 14:53:01

+0

它的工作原理!谢谢!!! – Ace 2013-03-06 06:15:16

+0

@Ace真棒很高兴它为你工作:) – cwgem 2013-03-06 06:17:48

1
import redis 
r = redis.StrictRedis() 
img = open("/path/to/img.jpeg","rb").read() 
r.set("bild1",img) 

也在这里工作!

相关问题