Django PIL 直接从内存中或数据库中blob显示图片

阅读更多
最近想实现一个图片验证的Python代码,被PIL卡住了。
因为看了PIL的一些demo,就是没有看到直接将image转换成内存数据或可以直接print数据的,总不成我要将image先存成临时文件吧?这我可接受不了,我试了好长时间终于在limodou那里的一篇文章找到了灵感,原来是使用StringIO。

以下就是代码(注意,如果是从数据库中读取数据,要转换成image对象很容易,这里不叙述):
# Create your views here.

from django.http import HttpResponse

import Image, ImageDraw
import StringIO

def validate(request):
	#创建一个IO流对象
	mstream=StringIO.StringIO()
	#这是我想要从querystring中获取的显示图片的字符(如果想要图片验证,则加密它,注意我没有使用session存储这个需要显示的字符串,因为session消耗资源太大)
	text = request.REQUEST["pstr"]
	#我这里演示的是直接产生的字符串,实际中需要加入噪音线
	im = Image.new("RGBA", (80, 20),color=127*200)
	draw = ImageDraw.Draw(im, "RGBA")
	draw.ink = 255
	draw.text((0,0), text)
	im.save(mstream,"JPEG")

	return HttpResponse(mstream.getvalue(),"image/jpg")


好了,如果你配置了django,可以加一个view试一试,如果没有,去掉跟django有关的,其他代码照样可以使用。

你可能感兴趣的:(Django,Python)