zoukankan      html  css  js  c++  java
  • python生成验证码脚本

    最近每天都用python写一个小的脚本,练习使用python语法。

    验证码的生成:

    这里使用了python的图像处理库PIL,安装PIL的过程中出了一个小麻烦,就使用Pillow-win32的一个文件,具体的我也忘了,可以百度下。

    直接看代码:

     

    # -*- coding:utf-8 -*-
    
    from PIL import Image,ImageFont,ImageDraw,ImageFilter
    import random
    
    
    #返回随机字母
    def charRandom():
        return chr((random.randint(65,90)))
    
    #返回随机数字
    def numRandom():
        return random.randint(0,9)
    
    #随机颜色
    def colorRandom1():
        return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
    
    #随机长生颜色2
    def colorRandom2():
        return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
    
    width = 60 * 4
    height = 60
    image = Image.new('RGB', (width,height), (255,255,255));
    #创建font对象
    font = ImageFont.truetype('Arial.ttf',36);
    
    #创建draw对象
    draw = ImageDraw.Draw(image)
    #填充每一个颜色
    for x in range(width):
        for y in range(height):
            draw.point((x,y), fill=colorRandom1())
            
    #输出文字
    for t in range(4):
        draw.text((60*t+10,10), charRandom(),font=font, fill=colorRandom2())
    
    #模糊
    image = image.filter(ImageFilter.BLUR)
    image.save('./image/code.jpg','jpeg')
    

    PIL对于图像的处理还是可以的:

    这里是官方的文档:http://effbot.org/imagingbook/ 讲的很详细

    Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。可以对图形进行简单的操作例如旋转、裁剪、缩小放大,滤波等等。

    ImageFont模块是字体模块,可以对字体进行设置

    上面程序的思想:

    1、定义了几个随机获取颜色和数字字母的函数,获得验证码的文字

    2、Image.new生成一个黑色的画布,也就是图片,大小60*240

    3、ImageFont定义图片上将使用的字体

    4、对该图片生成一个draw对象,通过该draw对象,改变图像的像素,使用随见长生的颜色

    5、在图片上产生文字,文字也使用随机的颜色

    6、对图片进行模糊化处理

    7、将图片保存

    最后就可以在image文件下得到code.jpg 的图片

    扩展:

    可以的话,还可以通过draw对象在图片上随机产生几根线条,将验证码变得更难看懂,可以将文字倾斜等等。

    image.rotate(random.randint(0,30),expand=0)
    
    def randomLine(self, num):
      draw = ImageDraw.Draw(self.image)
      for i in range(0,num):
      draw.line([self.randomPoint(),self.randomPoint()], self.randomRGB())
      del draw
    

      

      关于验证码还有很多可以值得看的,之前在用opencv的时候,就想着做一个验证码识别的程序,从而可以实现自动登入系统,不需要每次都手工输入验证码,这好像也是图灵研究的一部分,也是人和机器的区分标志,全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码。具体的可以百度了解。

  • 相关阅读:
    浏览器20年图说简史
    CF1437D Solution
    CF1446B Solution
    CF1444A Solution
    CF1437C Solution
    让您的网站拥有MSDN资源库搜索功能[转摘MSDN]
    自定义web part版面变形的原因
    SPS中模板保存数据库的位置
    利用配置文件自定义站点
    VS.NET2003 开发环境 生成样式表 和 自动书写HTML对象模型
  • 原文地址:https://www.cnblogs.com/silence-hust/p/4266092.html
Copyright © 2011-2022 走看看