Python-----验证码图片的制作

 本文中心为验证码图片制作

一共为以下五步:

  1. 导包,

  2. 生成验证码图片的纯色背景图,相当于一个画布

  3. 将纯色背景图的每一个像素点用随机颜色进行填充

  4. 在图片上写入随机字符,在这个过程中,需要定义字体,随后才可以生成字符

        4.1 定义字体:首先要从电脑上找到字体库,只需在我的电脑中搜索fonts文件夹即可,找到后,打开,就可以看到电脑中有的字体,选择自己喜欢的若干字体文件,拖到本代码所在的文件路径,即可使用。

        4.2  生成字符

   5,显示图片

注:其余需要注释的地方已在代码中穿插

import Image
import ImageDraw
import ImageFont
import random
# 思路:定义随机字符,定义随机颜色,将随机颜色填充到一张画布上,在画布上定义随机字符

#获得随机颜色函数,只需返回三个0-255之间的数即可
def getcolor():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

#获取随机字符
def getchar():
    #这里需要随机生成字母或者数字,依照上一篇博客可知
    if random.randint(0, 1):
        return chr(random.randint(65, 90))
    else:
        return str(random.randint(0, 9))

if __name__ == '__main__':
    # 1. 首先定义一个图片,用来显示随机生成的验证码
    WIDTH=360#背景图片的宽
    HEIGHT=120#背景图片的高
    img=Image.new(mode="RGB",size=(WIDTH,HEIGHT),color=(255,255,255))
    # img.show()

    #2. 利用ImageDraw模块的Draw方法,将img对象与ImageDraw模块绑定,从而创建一个可用来对img进行操控的对象,这里命名draw。
    draw=ImageDraw.Draw(im=img)
    #3. 给背景图添加随机颜色
    #使用ImageDraw库中的point可以在图片上的给定一个坐标点的位置处画一个点
    for x in range(WIDTH):
        for y in range(HEIGHT):
            draw.point((x,y),fill=getcolor())
    # img.show()

    # 4. 现在图片定义好了,就需要往图片上写字了,
    # 4.1首先要做的就是定义字的字体,为了与现实中的验证码尽量的相近,可以多使用几种字体,使用列表来存储字体
    font_list=["font1.TTF","font2.TTF"]
    #4.2定义字体以及字体大小,在这里要注意如果字体大小定义的过小,很容易观察不到结果
    font=ImageFont.truetype(font=font_list[random.randint(0,1)],size=90)
    #4.3往图片中添加随机字符
    #验证码一般为四个字符或数字的组合,所以需要四次获取getchar(),为了使字符不被先生成的字符覆盖,需要定义位置,只需改变x的位置即可
    x=30
    for i in range(4):
        draw.text((x,10),text=getchar(),font=font,fill=getcolor())
        x+=70
    #5 显示图片
    img.show()
    #如果想保存图片,执行下面语句
    # img.save("图片名字.png","PNG")

运行效果如下:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值