Python生成随机验证

Python生成随机验证码

 

Python生成随机验证码,需要使用PIL模块.

安装:

1 pip3 install pillow

基本使用

1. 创建图片

1 2 3 4 5 6 7 8 9 from PIL import Image img = Image.new(mode='RGB', size=(12030), color=(255255255))   # 在图片查看器中打开 # img.show()    # 保存在本地 with open('code.png','wb') as f:     img.save(f,format='png')

2. 创建画笔,用于在图片上画任意内容

1 2 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB')

3. 画点

1 2 3 4 5 6 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB') # 第一个参数:表示坐标 # 第二个参数:表示颜色 draw.point([100100], fill="red") draw.point([300300], fill=(255255255))

4. 画线

1 2 3 4 5 6 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB') # 第一个参数:表示起始坐标和结束坐标 # 第二个参数:表示颜色 draw.line((100,100,100,300), fill='red') draw.line((100,100,300,100), fill=(255255255))

5. 画圆

1 2 3 4 5 6 7 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB') # 第一个参数:表示起始坐标和结束坐标(圆要画在其中间) # 第二个参数:表示开始角度 # 第三个参数:表示结束角度 # 第四个参数:表示颜色 draw.arc((100,100,300,300),0,90,fill="red")

6. 写文本

1 2 3 4 5 6 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB') # 第一个参数:表示起始坐标 # 第二个参数:表示写入内容 # 第三个参数:表示颜色 draw.text([0,0],'python',"red")

7. 特殊字体文字

1 2 3 4 5 6 7 8 9 10 img = Image.new(mode='RGB', size=(12030), color=(255255255)) draw = ImageDraw.Draw(img, mode='RGB') # 第一个参数:表示字体文件路径 # 第二个参数:表示字体大小 font = ImageFont.truetype("kumo.ttf"28) # 第一个参数:表示起始坐标 # 第二个参数:表示写入内容 # 第三个参数:表示颜色 # 第四个参数:表示颜色 draw.text([00], 'python'"red", font=font)

图片验证码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 import random   def check_code(width=120, height=30, char_length=5, font_file='kumo.ttf', font_size=28):     code = []     img = Image.new(mode='RGB', size=(width, height), color=(255255255))     draw = ImageDraw.Draw(img, mode='RGB')       def rndChar():         """         生成随机字母            :return:         """         return chr(random.randint(6590))       def rndColor():         """         生成随机颜色         :return:         """         return (random.randint(0255), random.randint(10255), random.randint(64255))       # 写文字     font = ImageFont.truetype(font_file, font_size)     for in range(char_length):         char = rndChar()         code.append(char)         = random.randint(04)         draw.text([i * width / char_length, h], char, font=font, fill=rndColor())       # 写干扰点     for in range(40):         draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())       # 写干扰圆圈     for in range(40):         draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())         = random.randint(0, width)         = random.randint(0, height)         draw.arc((x, y, x + 4, y + 4), 090, fill=rndColor())       # 画干扰线     for in range(5):         x1 = random.randint(0, width)         y1 = random.randint(0, height)         x2 = random.randint(0, width)         y2 = random.randint(0, height)           draw.line((x1, y1, x2, y2), fill=rndColor())       img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)     return img,''.join(code)     if __name__ == '__main__':     # 1. 直接打开     # img,code = check_code()     # img.show()       # 2. 写入文件     # img,code = check_code()     # with open('code.png','wb') as f:     #     img.save(f,format='png')       # 3. 写入内存(Python3)     # from io import BytesIO     # stream = BytesIO()     # img.save(stream, 'png')     # stream.getvalue()       # 4. 写入内存(Python2)     # import StringIO     # stream = StringIO.StringIO()     # img.save(stream, 'png')     # stream.getvalue()       pass
上一篇:Qt同步线程(比较清楚,而且QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition 每个都有例子)


下一篇:PHP设计模式之装饰器模式