码迷,mamicode.com
首页 > 其他好文 > 详细

L7-6 神奇的验证码

时间:2020-02-02 01:36:34      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:验证码   abc   top   pre   操作   tar   random   网站安全   sam   

一、课堂导入

上节课我们学习了制作了表情包,本节课我们将继续探究数据操作。

二、认识验证码

1.什么是验证码?

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

2.作用

# 验证码是许多网站用于注册登录的。
# 它能有效防止恶意登录注册,验证码每次都不同,
# 可以避免病毒或者软件自动申请用户及自动登陆,保护网站安全。

三、制作验证码

1.特点

# 图片上有很多的小点;
# 图片上有很多线条;
# 图片上有字母数字;
# 图片上有几种颜色。

2.制作二维码步骤

需要使用的库有PIL 和random

# 首先创建出一张图片
# 在图片上随机画上点
# 在图片上随机画线条
# 在图片上写一些文字
import PIL
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
class Picture(object):
    def __init__(self,text_str,size,background):
        ‘‘‘
        text_str:验证码显示的字符组成的字符串
        size:图片大小
        background:背景颜色
        ‘‘‘
        self.text_str=list(text_str)
        self.size=size
        self.background=background
    def create_pic(self):
        ‘‘‘
        创建一张图片
        ‘‘‘
        self.width,self.height=self.size
        self.img=Image.new("RGB",self.size,self.background)
        # 实例化画笔
        self.draw=ImageDraw.Draw(self.img)
        
    def create_point(self,num,color):
        ‘‘‘
        num:画点的数量
        color:点的颜色
        ‘‘‘
        for i in range(num):
            self.draw.point(
                (random.randint(0,self.width),random.randint(0,self.height)),
                fill=color)
                
    def create_line(self,num,color):
        ‘‘‘
        num:线条的数量
        color:线条的颜色
        ‘‘‘
        for i in range(num):
            self.draw.line(
                [
                    (random.randint(0,self.width),random.randint(0,self.height)),
                    (random.randint(0,self.width),random.randint(0,self.height))
                ],fill=color
                )
    # 在图片上写文字
    def create_text(self,start_xy,font_type,font_size,font_color,font_num):
        ‘‘‘
        start_xy:第一个字左上角坐标(x,y)
        font_type:字体
        font_size:文字大小
        font_color:文字颜色
        font_num:文字数量
        ‘‘‘
        font=ImageFont.truetype(font_type,font_size)
        self.draw.text(start_xy,"".join(random.sample(self.text_str,font_num)),
        font=font,fill=font_color)
# 设置图片类的三个基本参数
strings="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
size=(150,50)
background="white"
# 实例化一个图片对象
pic=Picture(strings,size,background)
# 传递参数,调用定义的四个方法
pic.create_pic()
pic.create_point(500,(201,47,37))
pic.create_line(30,(111,90,210))
pic.create_text((7,7),"simsun.ttc",24,(0,0,205),5)
pic.img.show()
# 保存图片
pic.img.save("C:\\Users\\admin\\Desktop\\Tx\\Picture\\code.png")
                
                
                
                

 

L7-6 神奇的验证码

标签:验证码   abc   top   pre   操作   tar   random   网站安全   sam   

原文地址:https://www.cnblogs.com/xiaoxiao-ya/p/12250515.html

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