Python利用PIL库生成随机图片验证码完整代码

小石头
小石头
发布时间:2026-10-15 | 5人浏览过
原创

本文详细介绍如何使用Python的PIL库生成随机图片验证码。通过导入random和PIL模块,定义随机字符、背景色及字体色生成函数,最终组合成指定尺寸的验证码图片。文章提供完整可运行代码,支持直接显示验证结果,无需保存文件,适用于人机验证场景。

Python生成随机图片验证码概述

本文介绍如何使用Python生成随机图片验证码。该验证码可用于区分人机操作,实现过程简便且高效。

模块导入与准备工作

首先,需要导入必要的Python模块以支持图像处理和随机数生成。

核心依赖库导入

import random
from PIL import Image,ImageFont,ImageDraw

随机验证码字符生成逻辑

接下来,编写生成随机验证码字符的逻辑。

随机字符选择函数实现

def rndtxt():
    txt_list = []
    # 大写字母
    txt_list.extend([i for i in range(65,90)])
    # 小写字母
    txt_list.extend([i for i in range(97,123)])
    # 数字
    txt_list.extend([i for i in range(48,57)])
    return chr(txt_list[random.randint(0,len(txt_list)-1)])

背景与字体颜色随机化

定义函数以生成随机背景颜色和字体颜色,确保验证码的可读性与随机性。

颜色生成函数定义

def rndbgcolor():
    # 背景颜色
    return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
 
def rndtxtcolor2():
    # 字体颜色
    return (random.randint(32,127),random.randint(32,127),random.randint(32,127))

验证码图片生成与展示

执行生成过程,打印验证码内容并以图片形式直接展示,不保存为文件,仅用于即时验证。

验证码绘制与显示流程

def code():
    weight = 240
    hight = 60
    image = Image.new('RGB',(weight,hight),(255,255,255))
    font = ImageFont.truetype('msyh.ttc',36)
    draw = ImageDraw.Draw(image)
 
    # 填充背景颜色
    for x in range(weight):
        for y in range(hight):
            draw.point((x,y),fill=rndbgcolor())
 
    # 生成随机验证码
    for T in range(4):
        rndtxt_2 = rndtxt()
        print(rndtxt_2)       # 打印验证码的值
        draw.text((60 * T + 10,10),rndtxt_2,font=font,fill=rndtxtcolor2())
    image.show()

完整代码实现

以下是实现上述功能的完整Python代码。

完整可运行代码

#!/usr/bin/env python3
import random
from PIL import Image,ImageFont,ImageDraw
 
def rndtxt():
    txt_list = []
    # 大写字母
    txt_list.extend([i for i in range(65,90)])
    # 小写字母
    txt_list.extend([i for i in range(97,123)])
    # 数字
    txt_list.extend([i for i in range(48,57)])
    return chr(txt_list[random.randint(0,len(txt_list)-1)])
 
def rndbgcolor():
    # 背景颜色
    return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
 
def rndtxtcolor2():
    # 字体颜色
    return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
 
def code():
    weight = 240
    hight = 60
    image = Image.new('RGB',(weight,hight),(255,255,255))
    font = ImageFont.truetype('msyh.ttc',36)
    draw = ImageDraw.Draw(image)
 
    # 填充背景颜色
    for x in range(weight):
        for y in range(hight):
            draw.point((x,y),fill=rndbgcolor())
 
    # 生成随机验证码
    for T in range(4):
        rndtxt_2 = rndtxt()
        print(rndtxt_2)       # 打印验证码的值
        draw.text((60 * T + 10,10),rndtxt_2,font=font,fill=rndtxtcolor2())
    image.show()
 
code()

总结与参考资料

以上即为Python生成随机图片验证码的完整实现。如需了解更多Python图片验证码相关资源,可查阅本站其他技术文章。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表