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']#获取图片所含有的验证码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值