亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python生成驗(yàn)證碼圖片代碼分享

 更新時(shí)間:2016年01月28日 17:23:54   作者:lxydo  
這篇文章主要為大家介紹了python生成驗(yàn)證碼圖片代碼,生成原理是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素,想要實(shí)現(xiàn)驗(yàn)證碼圖片的朋友可以參考一下

本文實(shí)例為大家分享了python生成驗(yàn)證碼圖片代碼,分享給大家供大家參考,具體內(nèi)容如下

基本上大家使用每一種網(wǎng)絡(luò)服務(wù)都會(huì)遇到驗(yàn)證碼,一般是網(wǎng)站為了防止惡意注冊(cè)、發(fā)帖而設(shè)置的驗(yàn)證手段。其生成原理是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR)。下面就詳細(xì)講解如何生成驗(yàn)證碼。

所需環(huán)境

除了配置好的python環(huán)境外,還需要配有python中的PIL庫(kù),這是python中專(zhuān)門(mén)用來(lái)處理圖片的庫(kù)。用傳統(tǒng)的pip install 方法或者下載源碼 python setup.py install 方法安裝該庫(kù),很可能會(huì)報(bào)錯(cuò)(視運(yùn)行環(huán)境不同)。可以采用下面這個(gè)方法

  • 1.下載安裝包URL,要下載支持全平臺(tái)的。
  • 2.解壓縮: tar –zxv –f Imaging-1.1.7.tar.gz
  • 3.進(jìn)入到解壓后的目錄: cd Imaging-1.1.7
  • 4.Bulid pakage:python setup.py build_ext –i
  • 5.測(cè)試:python selftest.py
  • 6.安裝:python setup.py install

代碼實(shí)現(xiàn)

要生成驗(yàn)證碼圖片,我們首先要生成一個(gè)隨機(jī)字符串,包含26個(gè)字母和10個(gè)數(shù)字。

#用來(lái)隨機(jī)生成一個(gè)字符串
def gene_text():
 source = list(string.letters)
 for index in range(0,10):
  source.append(str(index))
 return ''.join(random.sample(source,number))#number是生成驗(yàn)證碼的位數(shù)

然后我們要?jiǎng)?chuàng)建一個(gè)圖片,寫(xiě)入字符串,需要說(shuō)明的這里面的字體是不同系統(tǒng)而定,如果沒(méi)有找到系統(tǒng)字體路徑的話(huà),也可以不設(shè)置

def gene_code():
 width,height = size #寬和高
 image = Image.new('RGBA',(width,height),bgcolor) #創(chuàng)建圖片
 font = ImageFont.truetype(font_path,25) #驗(yàn)證碼的字體和字體大小
 draw = ImageDraw.Draw(image) #創(chuàng)建畫(huà)筆
 text = gene_text() #生成字符串
 font_width, font_height = font.getsize(text)
 draw.text(((width - font_width) / number, (height - font_height) / number),text,\
   font= font,fill=fontcolor) #填充字符串

接下來(lái),我們要在圖片上畫(huà)幾條干擾線

#用來(lái)繪制干擾線
def gene_line(draw,width,height):
 begin = (random.randint(0, width), random.randint(0, height))
 end = (random.randint(0, width), random.randint(0, height))
 draw.line([begin, end], fill = linecolor)

最后創(chuàng)建扭曲,加上濾鏡,用來(lái)增強(qiáng)驗(yàn)證碼的效果。

 image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR) #創(chuàng)建扭曲
 image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #濾鏡,邊界加強(qiáng)
 image.save('idencode.png') #保存驗(yàn)證碼圖片

下面是用上述程序生成的一個(gè)驗(yàn)證碼

下面是完整的代碼:

#coding=utf-8
import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter

#字體的位置,不同版本的系統(tǒng)會(huì)有不同
font_path = '/Library/Fonts/Arial.ttf'
#生成幾位數(shù)的驗(yàn)證碼
number = 4
#生成驗(yàn)證碼圖片的高度和寬度
size = (100,30)
#背景顏色,默認(rèn)為白色
bgcolor = (255,255,255)
#字體顏色,默認(rèn)為藍(lán)色
fontcolor = (0,0,255)
#干擾線顏色。默認(rèn)為紅色
linecolor = (255,0,0)
#是否要加入干擾線
draw_line = True
#加入干擾線條數(shù)的上下限
line_number = (1,5)

#用來(lái)隨機(jī)生成一個(gè)字符串
def gene_text():
 source = list(string.letters)
 for index in range(0,10):
  source.append(str(index))
 return ''.join(random.sample(source,number))#number是生成驗(yàn)證碼的位數(shù)
#用來(lái)繪制干擾線
def gene_line(draw,width,height):
 begin = (random.randint(0, width), random.randint(0, height))
 end = (random.randint(0, width), random.randint(0, height))
 draw.line([begin, end], fill = linecolor)

#生成驗(yàn)證碼
def gene_code():
 width,height = size #寬和高
 image = Image.new('RGBA',(width,height),bgcolor) #創(chuàng)建圖片
 font = ImageFont.truetype(font_path,25) #驗(yàn)證碼的字體
 draw = ImageDraw.Draw(image) #創(chuàng)建畫(huà)筆
 text = gene_text() #生成字符串
 font_width, font_height = font.getsize(text)
 draw.text(((width - font_width) / number, (height - font_height) / number),text,\
   font= font,fill=fontcolor) #填充字符串
 if draw_line:
  gene_line(draw,width,height)
 # image = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR) #創(chuàng)建扭曲
 image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR) #創(chuàng)建扭曲
 image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #濾鏡,邊界加強(qiáng)
 image.save('idencode.png') #保存驗(yàn)證碼圖片
if __name__ == "__main__":
 gene_code()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python pytesseract庫(kù)的實(shí)例用法

    python pytesseract庫(kù)的實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python pytesseract庫(kù)的實(shí)例用法,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • Python使用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包

    Python使用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包

    dpkt項(xiàng)目是一個(gè)Python模塊,主要用于對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析和操作,z這篇文章主要為大家介紹了python如何利用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包,有需要的可以參考下
    2023-10-10
  • Python使用列表推導(dǎo)式快速生成列表

    Python使用列表推導(dǎo)式快速生成列表

    這篇文章主要介紹了Python使用列表推導(dǎo)式快速生成列表,列表推導(dǎo)式是Python構(gòu)建列表list的一種快捷方式,可以使用簡(jiǎn)潔的代碼就創(chuàng)建出一個(gè)列表,需要的朋友可以參考下
    2023-07-07
  • 詳解python破解zip文件密碼的方法

    詳解python破解zip文件密碼的方法

    這篇文章主要介紹了python破解zip文件密碼的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python利用sched模塊實(shí)現(xiàn)定時(shí)任務(wù)

    Python利用sched模塊實(shí)現(xiàn)定時(shí)任務(wù)

    今天我們來(lái)介紹一下Python當(dāng)中的定時(shí)任務(wù),主要用到的模塊是sched,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Python爬蟲(chóng)之解析HTML頁(yè)面詳解

    Python爬蟲(chóng)之解析HTML頁(yè)面詳解

    本文介紹了Python中用于解析HTML頁(yè)面的重要工具之一——BeautifulSoup庫(kù),詳細(xì)講解了BeautifulSoup庫(kù)的基本使用方法、標(biāo)簽選擇器、CSS選擇器、正則表達(dá)式、遍歷文檔樹(shù)等內(nèi)容,并結(jié)合實(shí)例代碼展示了BeautifulSoup庫(kù)的應(yīng)用場(chǎng)景
    2023-04-04
  • python 實(shí)現(xiàn)端口掃描工具

    python 實(shí)現(xiàn)端口掃描工具

    這篇文章主要介紹了python 實(shí)現(xiàn)端口掃描工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)

    Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)

    這篇文章主要介紹了Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù),代碼實(shí)現(xiàn)了計(jì)算列表中元素的最小公倍數(shù)的功能,包括公式介紹,需要的朋友可以參考一下
    2021-11-11
  • Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求)

    Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求)

    這篇文章主要介紹了Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)的矩陣類(lèi)實(shí)例

    Python實(shí)現(xiàn)的矩陣類(lèi)實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)的矩陣類(lèi),結(jié)合完整實(shí)例形式分析了Python矩陣的定義、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08

最新評(píng)論