国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

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

2020-01-04 17:47:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要為大家介紹了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à)幾條干擾線(xiàn)

#用來(lái)繪制干擾線(xiàn)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)證碼

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

下面是完整的代碼:

#coding=utf-8import randomimport stringimport sysimport mathfrom 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)#干擾線(xiàn)顏色。默認(rèn)為紅色linecolor = (255,0,0)#是否要加入干擾線(xiàn)draw_line = True#加入干擾線(xiàn)條數(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)繪制干擾線(xiàn)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ì)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰溪市| 吉水县| 沛县| 辉南县| 绵竹市| 合山市| 宣武区| 中江县| 饶平县| 沾益县| 扬中市| 屯昌县| 连山| 梅河口市| 福州市| 商河县| 洮南市| 尉犁县| 安宁市| 卢氏县| 阿瓦提县| 亚东县| 遂川县| 肇庆市| 五原县| 三亚市| 鲁甸县| 车险| 兰考县| 康乐县| 新乐市| 武清区| 寿阳县| 夏河县| 嘉荫县| 江津市| 张家口市| 韩城市| 长治县| 湘西| 安西县|