• 技术文章 >Python技术 >Python高级

    Python脚本绘制验证码

    PythonPython2019-06-15 10:56:28原创3579
    在Python中有个强大的绘图库pil,可以实现验证码的绘制功能。

    PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

    由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

    例讲述了python使用pil生成图片验证码的方法。分享给大家供大家参考。具体实现方法如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    # -*- coding: utf-8 -*-

    #导入三个模块

    import Image,ImageDraw,ImageFont

    import random

    import math

    '''基本功能'''

    #图片宽度

    width = 100

    #图片高度

    height = 40

    #背景颜色

    bgcolor = (255,255,255)

    #生成背景图片

    image = Image.new('RGB',(width,height),bgcolor)

    #加载字体

    font = ImageFont.truetype('FreeSans.ttf',30)

    #字体颜色

    fontcolor = (0,0,0)

    #产生draw对象,draw是一些算法的集合

    draw = ImageDraw.Draw(image)

    #画字体,(0,0)是起始位置

    draw.text((0,0),'1234',font=font,fill=fontcolor)

    #释放draw

    del draw

    #保存原始版本

    image.save('1234_1.jpeg')

    '''演示扭曲,需要新建一个图片对象'''

    #新图片

    newImage = Image.new('RGB',(width,height),bgcolor)

    #load像素

    newPix = newImage.load()

    pix = image.load()

    offset = 0

    for y in range(0,height):

      offset += 1

      for x in range(0,width):

        #新的x坐标点

        newx = x + offset

        #你可以试试如下的效果

        #newx = x + math.sin(float(y)/10)*10

        if newx < width:           

          #把源像素通过偏移到新的像素点

          newPix[newx,y] = pix[x,y]

    #保存扭曲后的版本     

    newImage.save('1234_2.jpeg')

    '''形变一下'''

    #x1 = ax+by+c

    #y1 = dx+ey+f

    newImage = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0))

    newImage.save('1234_3.jpeg')

    '''画干扰线,别画太多,免得用户都看不清楚'''   

    #创建draw,画线用

    draw = ImageDraw.Draw(newImage)

    #线的颜色

    linecolor= (0,0,0)

    for i in range(0,15):

      #都是随机的

      x1 = random.randint(0,width)

      x2 = random.randint(0,width)

      y1 = random.randint(0,height)

      y2 = random.randint(0,height)

      draw.line([(x1, y1), (x2, y2)], linecolor)     

    #保存到本地

    newImage.save('1234_4.jpeg')

    专题推荐:python
    上一篇:Python是动态强类型的吗 下一篇:用Python举例实现逆波兰表达式

    相关文章推荐

    • Python中怎么处理字符编码问题• Python是动态强类型的吗• 举例说明Python中常见的数制转换

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网