Python編寫生成驗(yàn)證碼腳本

筆者用的是python3舷礼、pillow4.2.1版本蛛株。
pillow庫文件里笋粟,用到了Image,ImageDraw,ImageFont,Imagefilter模塊。
這個項(xiàng)目還用到了random模塊。
在python2里用來實(shí)現(xiàn)圖像處理的庫pil盾沫,并不兼容python3绞幌,但是3里有一個出自pil的庫文件pillow可以供使用。

一、分析生成驗(yàn)證碼步驟

人們?nèi)粘I钪芯厦迹?jīng)常會見到并且用到驗(yàn)證碼哗戈,驗(yàn)證碼荷科,通常是由具有顏色的扭曲的字符串加上極具干擾的背景組成。
因此,我在這里把驗(yàn)證碼分為四塊瞎嬉,基礎(chǔ)圖片便监、干擾背景、驗(yàn)證碼字符串、濾鏡巷嚣。

1.基礎(chǔ)圖片

我們先定義一張圖片涤姊,用以表達(dá)驗(yàn)證碼。
圖片顏色是用RGB顏色模式。
RGB色彩值,通過對紅文兑、藍(lán)涡上、綠進(jìn)行隨機(jī)定值后雁佳,體現(xiàn)具體的顏色旱易,定值范圍為0~255全释,也就是說,能夠有1600萬種顏色黔州。

2.干擾背景

我在這個腳本里,無腦選擇了直線和點(diǎn)作為干擾的背景浑度。(暫時想不到什么因素可以作為干擾背景……)

3.驗(yàn)證碼字符串

字符串包括了所有的英文大小寫和個位數(shù)字谨设。
在這里二蓝,驗(yàn)證碼包括了隨機(jī)的五位字符串踊跟。

4.濾鏡

通過設(shè)置濾鏡以及其扭曲程度拳昌,我們可以扭曲圖片炬藤。
圖片的扭曲方式總共分兩大方面:水平和垂直细睡。水平包括了縮放蠢壹、傾斜和位移。垂直也包括了縮放、傾斜和位移。

二跪者、具體代碼

我們先定義一張圖片棵帽,以用來作為一塊畫板。
代碼

img = Image.new("RGB",(150,50),(255,255,255))

作用
第一個參數(shù):代表采用RGB顏色模式
第二個參數(shù):代表圖片大小 150 x 50
第三個參數(shù):具體的圖片顏色
至此渣玲,畫板我們已經(jīng)構(gòu)造好了逗概,接下來,我們需要一只畫筆忘衍。
代碼

draw = ImageDraw.Draw(img)

畫筆和畫板都已經(jīng)準(zhǔn)備好了逾苫,我們接下來需要在這個畫板上繪制一些由線條和點(diǎn)構(gòu)成的干擾背景。
代碼

#繪制線條
#線條是由兩個定點(diǎn)連接成的線枚钓,對于二維背景圖來說铅搓,每個點(diǎn)都由(x,y)兩個坐標(biāo)值來確定位置搀捷。
for i in range(random.randint(1,10)):
    draw.line(
    [
        (random.randint(1,150),random.randint(1,150)),
        (random,randint(1,150),random.randint(1,150))
    ],
    fill = (0,0,0)
    )
#繪制點(diǎn)
for i in range(1000):
    draw.point(
    [
        random.randint(1,150),
        random.randint(1,150)
    ],
    fill = (0,0,0)
    )

只剩下需要被識別的字符串了星掰。
代碼

#定義所要生成隨機(jī)數(shù)的范圍:字母和數(shù)字
font_list = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
c_chars = "".join(random.randint(font_list,5))
#繪制字體
font = ImageFont.truetype("simsun.ttc",35)
draw.text((5,5),c_chars,font = font, fill = "green")
#第一個參數(shù):代表文字的位置,距離上和左的距離
#第二個參數(shù):代表文字的內(nèi)容
#第三個參數(shù):代表字體
#第四個參數(shù):代表字體顏色

最后我們需要定義扭曲的參數(shù)從而添加并且使用濾鏡嫩舟。
代碼

#定義扭曲的參數(shù)
params = [1 - float(random.randint(1,2))/100,
                0,
                0,
                0,
                1 - float(random.randint(1,2))/100,
                float(random.randint(1,2))/500,
                0.001,
                float(random.randint(1,1))/500,
]
#使用濾鏡
#添加濾鏡
img = img.transform((150,50),Image.PRESPECTIVE,params)
#第一個參數(shù):扭曲的范圍
#第二個參數(shù):扭曲的樣式
#第三個參數(shù):扭曲的參數(shù)
#進(jìn)行扭曲
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)

最后將產(chǎn)生的圖片輸出顯示氢烘。
代碼

img.show()

效果圖如下:

**驗(yàn)證碼效果圖**

PS:每天催眠自己,告誡自己一定要堅持學(xué)習(xí)家厌,或許在不久的將來就可以改變現(xiàn)狀了播玖!

That's all.PEACE~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饭于,隨后出現(xiàn)的幾起案子蜀踏,更是在濱河造成了極大的恐慌,老刑警劉巖掰吕,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件果覆,死亡現(xiàn)場離奇詭異,居然都是意外死亡畴栖,警方通過查閱死者的電腦和手機(jī)随静,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門八千,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吗讶,“玉大人,你說我怎么就攤上這事恋捆≌战裕” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵沸停,是天一觀的道長膜毁。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么瘟滨? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任候醒,我火速辦了婚禮,結(jié)果婚禮上杂瘸,老公的妹妹穿的比我還像新娘倒淫。我一直安慰自己,他們只是感情好败玉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布敌土。 她就那樣靜靜地躺著,像睡著了一般运翼。 火紅的嫁衣襯著肌膚如雪返干。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天血淌,我揣著相機(jī)與錄音矩欠,去河邊找鬼。 笑死悠夯,一個胖子當(dāng)著我的面吹牛晚顷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疗疟,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼该默,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了策彤?” 一聲冷哼從身側(cè)響起栓袖,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎店诗,沒想到半個月后裹刮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庞瘸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年捧弃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擦囊。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡违霞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞬场,到底是詐尸還是另有隱情买鸽,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布贯被,位于F島的核電站眼五,受9級特大地震影響妆艘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜看幼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一批旺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诵姜,春花似錦朱沃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑟俭,卻和暖如春翎卓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摆寄。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工失暴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人微饥。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓逗扒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠橘。 傳聞我的和親對象是個殘疾皇子矩肩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容