1. 程式人生 > >Python驗證碼生成

Python驗證碼生成

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']#獲取圖片所含有的驗證碼