码迷,mamicode.com
首页 > 编程语言 > 详细

Python生成随机验证码

时间:2019-03-03 09:44:44      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:随机验证码   point   验证码   参数   mod   结束   坐标   image   blog   

安装PIL模块:

pip3 install pillow

一、基本使用

1、创建图片

from PIL import Image

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))

# 在图片查看器中打开
# image.show()

# 保存在本地
with open("1.png", "wb") as f:
    image.save(f, format="png")

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

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")

3、画点

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")
# 第一个参数:坐标
# 第二个参数:颜色
draw.point([100, 100], fill="red")
draw.point([300, 300], fill=(255, 255, 255))

4、画线

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")
# 第一个参数:表示起始坐标和结束坐标
# 第二个参数:表示颜色
draw.line((100,100,100,300), fill="red")
draw.line((100,100,300,100), fill=(255, 255, 255))

5、画圆

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")
# 第一个参数:起始坐标和结束坐标(圆要画在其中间)
# 第二个参数:开始角度
# 第三个参数:结束角度
# 第四个参数:颜色
draw.arc((100,100,300,300), 0, 90, fill="red")

6. 写文本

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")
# 第一个参数:起始坐标
# 第二个参数:写入内容
# 第三个参数:颜色
draw.text([0,0], "python", "red")

7、特殊字体文字

image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(image, mode="RGB")
# 第一个参数:字体文件路径
# 第二个参数:字体大小
font = ImageFont.truetype("kumo.ttf", 28)
# 第一个参数:起始坐标
# 第二个参数:写入内容
# 第三个参数:颜色
# 第四个参数:字体
draw.text([0, 0], "python", "red", font=font)

字体文件,或者搜索 TrueType 字体文件 下载自己喜欢的字体。

二、图片验证码示例

import random
from PIL import Image, ImageDraw, ImageFont

def get_random_color():
    """获取随机颜色"""
    return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

def get_valid_code():
    """生成随机验证码"""
    image = Image.new("RGB", (136, 36), "rgb(255, 255, 255)")
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype("static/kumo.ttf", size=34)
    # 生成5个随机字母或数字
    valid_list = []
    for i in range(1, 6):
        number = str(random.randint(0, 9))
        lower_letter = chr(random.randint(97, 122))
        upper_letter = chr(random.randint(65, 90))
        random_char = random.choice([number, lower_letter, upper_letter])
        draw.text((i*20, 0), random_char, fill="black", font=font)
        valid_list.append(random_char)

    width = 136
    height = 36
    # 画干扰线
    for i in range(3):
        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=get_random_color())
    # 画干扰点
    for i in range(100):
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.point([x, y], fill=get_random_color())

    valid_str = "".join(valid_list)
    # valid_str保存在session中,在登录时用来做验证
    # request.session["valid_str"] = valid_str
    return image, valid_str

if __name__ == "__main__":
    image, code = get_valid_code()
    # 1、直接打开
    image.show()

    # 2、保存在本地
    # with open("code.png", "wb") as f:
    #     image.save(f, format="png")

    # 3、写入内存(Python3)
    # import io
    # stream = io.BytesIO()
    # image.save(stream, "png")
    # valid_image = stream.getvalue()
    # stream.close()
    # 从内存中获取刚生成的验证码图片,返回给前端
    # return HttpResponse(valid_image)

    # 4、写入内存(Python2)
    # import StringIO
    # stream = StringIO.StringIO()
    # image.save(stream, "png")
    # stream.getvalue()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

Python生成随机验证码

标签:随机验证码   point   验证码   参数   mod   结束   坐标   image   blog   

原文地址:https://www.cnblogs.com/believepd/p/10463811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!