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),俗稱驗證碼。具體的可以百度了解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM