最近想实现一个图片验证的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有关的,其他代码照样可以使用。