学会python——用python生成一个验证码(python实例二十)

目录

1.认识Python

2.环境与工具

2.1 python环境

2.2 Visual Studio Code编译

3.生成验证码

 3.1 代码构思

3.2 代码实例

3.3 运行如果

4.总结


1.认识Python

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象脚本语言

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。

2.环境与工具

2.1 python环境

在Windows上使用命令行窗口查看所安装的python版本

python --version

2.2 Visual Studio Code编译

Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。

3.生成验证码

 3.1 代码构思

通过使用pillow库,用该库生成一个image对象,再基于这个对象生成一个画笔,用画笔魔方人为输入在图形上操作。

3.2 代码实例

from PIL import Image, ImageDraw, ImageFont
import random

# 获取一个随机汉字
def get_random_chinese_char():
    high_byte = random.randint(0xb0, 0xf7)
    low_byte = random.randint(0xa1, 0xfe)
    two_bytes = (high_byte << 8) | low_byte
    str_hex = "%x" % two_bytes
    return bytes.fromhex(str_hex).decode('gb2312')

# 取出随机字符
def get_random_char():
    string_list = []
    string_list.append(chr(random.randint(65, 90)))  # 大写字母
    string_list.append(chr(random.randint(97, 122))) # 小写字母
    string_list.append(str(random.randint(0, 9)))    # 数字
    string_list.append(get_random_chinese_char())    # 汉字
    return random.choice(string_list)

# 生成随机颜色
def random_color_line():
    R = random.randint(18, 128)
    G = random.randint(18, 128)
    B = random.randint(18, 128)
    return (R, G, B)

# 生成随机颜色
def random_color_char():
    R = random.randint(68, 255)
    G = random.randint(68, 255)
    B = random.randint(68, 255)
    return (R, G, B)

# 生成在图形上的随机坐标值
def get_rand_point(image_obj):
    width, height = image_obj.size
    return (random.randint(0, width), random.randint(0, height))

# 生成干扰线
def draw_line(image_obj, num):
    draw = ImageDraw.Draw(image_obj)
    for i in range(num):
        draw.line([get_rand_point(image_obj), get_rand_point(image_obj)], fill=random_color_line())
    del draw

if __name__ == '__main__':
    # 创建一个新的图像对象
    Image_captcha = Image.new('RGB', (200, 100), (232, 232, 232))
    # 画干扰线
    draw_line(Image_captcha, 8)
    # 加载字体,确保字体文件在同一目录下
    try:
        font_china = ImageFont.truetype('cangekuheiziti.ttf', 50)        #字体文件
    except IOError:
        print("没有发现字体文件,请确保字体文件的路径正确。")
        exit()

    # 创建画笔对象
    draw_pen = ImageDraw.Draw(Image_captcha)
    # 画验证码字符
    for i in range(5):
        draw_pen.text((38 * i + 10, 25), get_random_char(), random_color_char(), font=font_china)
    del draw_pen  # 显式删除画笔对象

    # 显示图像
    Image_captcha.show()

    # 保存图像,确保保存路径存在
    try:
        Image_captcha.save('captcha.png')
    except IOError:
        print("Failed to save image. ")

3.3 运行结果

4.总结

该程序展示了普通的文字验证码生成方式。

程序中用了字体文件(.ttf格式),可以自行在网上下载。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值