#coding=utf-8
import Image,ImageDraw,ImageFont
import random
class RandChar(object):
@staticmethod
def getRandUnicode(supportNum=True,supportLow=True):
low = 1 if supportNum else 2;
up = 2 if not supportLow else 3;
num = random.randint(low,up)
if num==1:
return unichr(random.randint(48,57));
elif num==2:
return unichr(random.randint(65,90));
else:
return unichr(random.randint(97,122));
@staticmethod
def getGB2312():
''''''
head = random.randint(0xB0,0xF7);
body = random.randint(0xA,0xF);
if body==0xA:
tail = random.randint(1,0xF);
elif body==0xF:
if head ==0xD7:
tail = random.randint(0,9);
else:
tail = random.randint(1,0xe);#这会少几个汉字,不知道gb2312的编码规则,有的从0-e,有的从1-f,这里取得交集
else:
tail = random.randint(0,0xF);
val = "%x"%((head << 8) + (body << 4) + tail);
# print val
return val.decode('hex').decode('gb2312')
class VerificationCode(object):
def __init__(self,fontColor = (0, 0, 0),\
size = (100, 40),fontPath = 'SIMSUN.TTC',\
bgColor = (255, 255, 255),fontSize = 20):
'''fontpath:必须是系统所支持的字体,系统支持字体可以在c://windows/fonts下找到'''
self.fontColor = fontColor;
self.size = size;
self.bgColor = bgColor;
self.fontPath = fontPath;
self.fontSize = fontSize;
self.font = ImageFont.truetype(self.fontPath, self.fontSize)
self.img = Image.new("RGB", size, bgColor);
def drawText(self,pos,txt,fill):
draw = ImageDraw.Draw(self.img);
draw.text(pos, txt, fill , self.font)
del draw
def randRGB(self):
r = random.randint(0,255);
g = random.randint(0,255);
b = random.randint(0,255);
return (r,g,b);
def randPoint(self):
width,higth = self.size;
return (random.randint(0,width),random.randint(0,higth));
def drawLine(self,num):
draw = ImageDraw.Draw(self.img);
for i in range(0,num):
draw.line((self.randPoint(),self.randPoint()), self.randRGB(), 1);
del draw;
def getVerificationCode(self,num):
start = 0;
gas = 5;
for i in range(0,num):
x = start + self.fontSize * i + gas * (i + 1);
self.drawText((x , random.randint(0,10)), RandChar.getGB2312(), (0,0,0));
self.drawLine(15);
def save(self, path):
self.img.save(path)
vc = VerificationCode();
vc.getVerificationCode(4);
#vc.save("%s.jpg"%random.random())
vc.save("1.jpg")
#for i in range(1000):
# print RandChar.getGB2312()
#val = 'dff7'
#print val.decode('hex').decode('gb2312')