PIL生成图像验证码

验证码图像生成的原理是这样的:随机地生成若干个字符,并绘制到图像中,然后对图像的背景或前景进行识别难度的处理,处理措施包括:
(1)随机绘制不同颜色的背景点;(
2)使用随机色绘制字符;
(3)在图像中绘制随机的线段;
(4)对图片进行变形、模糊等处理。
(5)显示花、球等实物图像让操作者识别,以增加提交的难度。

#PIL生成图像验证码
from PIL import Image,ImageDraw,ImageFont
from numpy.random import randint,random
def rndChar():   #产生随机字符
    s="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%&*"

    return s[randint(0,len(s))]

def rndColor():#生成随机颜色
    return tuple(randint(64,256,3))

w=50*6;h=60    #设置图像的宽度和高度
a=Image.new('RGB',(w,h),(255,255,255))   #创建新图像(颜色模式,尺寸,颜色数值)
font=ImageFont.truetype("C:\\Windows\\Fonts\\simsunb.ttf",48)
b=ImageDraw.Draw(a)  #创建Draw对象

def createLines(n):    #绘制干扰线
    for i in range(n):
        begin=(randint(0,w),randint(0,h))   #起始点
        end=(randint(0,w),randint(0,h)) #结束点
    b.line([begin,end],fill=rndColor(),width=2)

def createPoints(rate):  #绘制干扰点
    for x in range(w):
        for y in range(h):
            if random(1)<=rate:
                b.point((x,y),fill=rndColor())

def drawStr():  #绘制字符
    Str=''
    for t in range(6):
        Chr=rndChar()
        Str=Str+Chr
        b.text((50*t+10,5),Chr,font=font,fill=rndColor())
    print(Str)
createLines(6)
createPoints(0.15)
drawStr()
a.show()
a.save("figure20.15.png")

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,生成随机图形验证码通常涉及到图像处理库,如PILPython Imaging Library)或其更新版本Pillow,以及可能用到的随机数生成库如random和numpy。以下是一个简单的步骤概述: 1. 导入所需的库: ```python from PIL import Image, ImageDraw, ImageFont import random import numpy as np ``` 2. 定义图形元素,如线条、圆形、矩形、字母和数字: ```python def draw_random_shape(size, shapes): shape = random.choice(shapes) if shape == 'line': draw.line((random.randint(0, size), random.randint(0, size)), (random.randint(0, size), random.randint(0, size)), fill=(0, 0, 0)) elif shape == 'circle': center = (random.randint(0, size), random.randint(0, size)) draw.ellipse((center-10, center-10, center+10, center+10), fill=(0, 0, 0)) # 添加其他形状,如矩形等 def generate_text(): return ''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=random.randint(4, 6))) ``` 3. 创建验证码图像: ```python size = 100 image = Image.new('RGB', (size, size), color='white') draw = ImageDraw.Draw(image) shapes = ['line', 'circle', 'rectangle'] # 可自定义形状列表 for _ in range(random.randint(4, 6)): draw_random_shape(size, shapes) text = generate_text() font = ImageFont.truetype("arial.ttf", size=random.randint(20, 30)) # 加载字体 text_position = (random.randint(10, size-10), random.randint(10, size-10)) draw.text(text_position, text, font=font, fill=(0, 0, 0)) # 保存验证码图片 image.save('captcha.png') ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值