Python驗證碼生成
阿新 • • 發佈:2019-01-01
from PIL import Image,ImageDraw,ImageFont,ImageFilter import random class checkcode: def __init__(self,**kwargs): self._width=kwargs['width'] self._height=kwargs['height'] self._checkcode=None @staticmethod def codegnertor(x=1):#預設為0-9 a-z source=['1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G'\ 'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] if x: t=random.sample(source,4) else: t=random.sample(source[:9],4) t="".join(t) return t def picgenertor(self): image = Image.new('RGB', (self._width, self._height), (255, 255, 255)) font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', 36) draw = ImageDraw.Draw(image) def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) def rndColor2(): return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) for x in range(self._width): for y in range(self._height): draw.point((x, y), fill=rndColor()) for t in range(4): draw.text((self._width/4 * t + self._width/12, 10), self._checkcode[t], font=font, fill=rndColor2()) begin = (0, random.randint(0, self._height)) end = (self._width, random.randint(0, self._height)) draw.line([begin, end], fill=(0,0,0), width=3) image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #image = image.transform((self._width + 30, self._height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0),Image.BILINEAR) # 建立扭曲 return image def __getitem__(self, key): if(key=='picture'): self._checkcode=self.codegnertor() return self.picgenertor() elif(key=="size"): return self._width,self._height elif(key=='checkcode'): return self._checkcode else: raise Exception('the key %s is valiad!'%key) def __str__(self): return 'code genertor'
呼叫方法:
x=checkcode(width=240,height=60)#width,height為驗證碼圖片
s=checkcode.codegenertor()#隨機生成驗證碼 x--->1 0-9 A--Z x--->0 0-9
pic=x['picture']#image物件
pic.save(path)#儲存圖片
code=x['checkcode']#獲取圖片所含有的驗證碼