python使用pil生成圖片驗(yàn)證碼的方法

字號(hào):


    這篇文章主要介紹了python使用pil生成圖片驗(yàn)證碼的方法,涉及Python操作Image,ImageDraw,ImageFont等模塊的相關(guān)技巧,需要的朋友可以參考下
    # -*- coding: utf-8 -*-
    #導(dǎo)入三個(gè)模塊
    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)
    #產(chǎn)生draw對(duì)象,draw是一些算法的集合
    draw = ImageDraw.Draw(image)
    #畫(huà)字體,(0,0)是起始位置
    draw.text((0,0),'1234',font=font,fill=fontcolor)
    #釋放draw
    del draw
    #保存原始版本
    image.save('1234_1.jpeg')
    '''演示扭曲,需要新建一個(gè)圖片對(duì)象'''
    #新圖片
    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坐標(biāo)點(diǎn)
    newx = x + offset
    #你可以試試如下的效果
    #newx = x + math.sin(float(y)/10)*10
    if newx < width:
    #把源像素通過(guò)偏移到新的像素點(diǎn)
    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')
    '''畫(huà)干擾線,別畫(huà)太多,免得用戶都看不清楚'''
    #創(chuàng)建draw,畫(huà)線用
    draw = ImageDraw.Draw(newImage)
    #線的顏色
    linecolor= (0,0,0)
    for i in range(0,15):
    #都是隨機(jī)的
    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')
    希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。