zoukankan      html  css  js  c++  java
  • L7-6 神奇的验证码

    一、课堂导入

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

    二、认识验证码

    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")
                    
                    
                    
                    
  • 相关阅读:
    Ural 1057. Amount of Degrees
    BZOJ 3517: 翻硬币
    BZOJ 4527: K-D-Sequence
    CTC联结时间分类算法(语音、文本识别)
    我小苏太狼又回来了.
    /*--------------分割线--------------*/
    /*--------------分割线--------------*/
    洛谷 P4149 [IOI2011]Race-树分治(点分治,不容斥版)+读入挂-树上求一条路径,权值和等于 K,且边的数量最小
    Codeforces 161.D. Distance in Tree-树分治(点分治,不容斥版)-树上距离为K的点对数量-蜜汁TLE (VK Cup 2012 Round 1)
    洛谷 P2634 [国家集训队]聪聪可可-树分治(点分治,容斥版) +读入挂+手动O2优化吸点氧才过。。。-树上路径为3的倍数的路径数量
  • 原文地址:https://www.cnblogs.com/xiaoxiao-ya/p/12250515.html
Copyright © 2011-2022 走看看