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