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

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

Python簡(jiǎn)單的制作圖片驗(yàn)證碼實(shí)例

2020-01-04 17:15:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這里示范的驗(yàn)證碼都是簡(jiǎn)單的,你也可以把字符扭曲

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

Python第三方庫(kù)無(wú)比強(qiáng)大,PIL 是python的一個(gè)d第三方圖片處理模塊,我們也可以使用它來(lái)生成圖片驗(yàn)證碼

PIL安裝

命令安裝:

pip install pillow

下載源碼安裝:

復(fù)制地址 :https://github.com/python-pillow/Pillow

PIL使用

例子:生成圖片,并填充文字

#!/usr/bin/python#-*-coding:utf-8-*-from PIL import Image, ImageDraw, ImageFont, ImageFilter# 實(shí)例一個(gè)圖片對(duì)象240 x 60:width = 60 * 4height = 60# 圖片顏色clo = (43, 34, 88) # 我覺(jué)得是紫藍(lán)色image = Image.new('RGB', (width, height), clo)# 創(chuàng)建Font對(duì)象:# 字體文件可以使用操作系統(tǒng)的,也可以網(wǎng)上下載font = ImageFont.truetype('./font/Arial.ttf', 36)# 創(chuàng)建Draw對(duì)象:draw = ImageDraw.Draw(image)# 輸出文字:str1 = "ren ren Python"w = 4 #距離圖片左邊距離h = 10 #距離圖片上邊距離draw.text((w, h), str1, font=font)# 模糊:image.filter(ImageFilter.BLUR)code_name = 'test_code_img.jpg'save_dir = './{}'.format(code_name)image.save(save_dir, 'jpeg')print("已保存圖片: {}".format(save_dir))
(venv) allenwoo@~/renren/code$ python test2.py 已保存圖片: ./test_code_img.jpg

圖片如下:

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

文字沒(méi)有什么色彩,我們也可以加上顏色,只需要在 text 中傳人 fill 參數(shù)就好

draw.text((w, h), str1, font=font, fill = (78, 64, 65))

隨便加的顏色

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

我們還可以把背景弄成很多個(gè)小點(diǎn),每隔n隔像素填充個(gè)其他顏色比如:

#!/usr/bin/python#-*-coding:utf-8-*-from PIL import Image, ImageDraw, ImageFont, ImageFilter# 實(shí)例一個(gè)圖片對(duì)象240 x 60:width = 60 * 4height = 60# 圖片顏色clo = (43, 34, 88) # 我覺(jué)得是紫藍(lán)色image = Image.new('RGB', (width, height), clo)# 創(chuàng)建Font對(duì)象:# 字體文件可以使用操作系統(tǒng)的,也可以網(wǎng)上下載font = ImageFont.truetype('./font/Arial.ttf', 36)# 創(chuàng)建Draw對(duì)象:draw = ImageDraw.Draw(image)# 填充像素:# 寬每隔 20, 高每隔5, 形成坐標(biāo)x,y# 紅色:220,20,60for x in range(0, width, 20):  for y in range(0, height, 5):    draw.point((x, y), fill=(220, 20, 60))# 輸出文字:str1 = "we are renren"w = 4 #距離圖片左邊距離h = 10 #距離圖片上邊距離draw.text((w, h), str1, font=font, fill = (78, 64, 65))# 模糊:image.filter(ImageFilter.BLUR)code_name = 'test_code_img.jpg'save_dir = './{}'.format(code_name)image.save(save_dir, 'jpeg')print("已保存圖片: {}".format(save_dir))

結(jié)果圖片:

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

PIL制作驗(yàn)證碼

利用以上這些,還有我們之前學(xué)習(xí)的隨機(jī)生成器random就可以做個(gè)驗(yàn)證碼了,

生成驗(yàn)證碼代碼

#!/usr/bin/python#-*-coding:utf-8-*-from uuid import uuid1from PIL import Image, ImageDraw, ImageFont, ImageFilterimport randomdef rnd_char():  '''  隨機(jī)一個(gè)字母或者數(shù)字  :return:   '''  # 隨機(jī)一個(gè)字母或者數(shù)字  i = random.randint(1,3)  if i == 1:    # 隨機(jī)個(gè)數(shù)字的十進(jìn)制ASCII碼    an = random.randint(97, 122)  elif i == 2:    # 隨機(jī)個(gè)小寫字母的十進(jìn)制ASCII碼    an = random.randint(65, 90)  else:    # 隨機(jī)個(gè)大寫字母的十進(jìn)制ASCII碼    an = random.randint(48, 57)  # 根據(jù)Ascii碼轉(zhuǎn)成字符,return回去  return chr(an)# 干擾def rnd_dis():  '''  隨機(jī)一個(gè)干擾字  :return:   '''  d = ['^','-', '~', '_', '.']  i = random.randint(0, len(d)-1)  return d[i]# 兩個(gè)隨機(jī)顏色都規(guī)定不同的區(qū)域,防止干擾字符和驗(yàn)證碼字符顏色一樣# 隨機(jī)顏色1:def rnd_color():  '''  隨機(jī)顏色,規(guī)定一定范圍  :return:   '''  return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 隨機(jī)顏色2:def rnd_color2():  '''   隨機(jī)顏色,規(guī)定一定范圍   :return:    '''  return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))def create_code():  # 240 x 60:  width = 60 * 4  height = 60  image = Image.new('RGB', (width, height), (192, 192, 192))  # 創(chuàng)建Font對(duì)象:  font = ImageFont.truetype('./font/Arial.ttf', 36)  # 創(chuàng)建Draw對(duì)象:  draw = ImageDraw.Draw(image)  # 填充每個(gè)像素:  for x in range(0, width, 20):    for y in range(0, height, 10):      draw.point((x, y), fill=rnd_color())  # 填充字符  _str = ""  # 填入4個(gè)隨機(jī)的數(shù)字或字母作為驗(yàn)證碼  for t in range(4):    c = rnd_char()    _str = "{}{}".format(_str, c)    # 隨機(jī)距離圖片上邊高度,但至少距離30像素    h = random.randint(1, height-30)    # 寬度的化,每個(gè)字符占圖片寬度1/4,在加上10個(gè)像素空隙    w = width/4 * t + 10    draw.text((w, h), c, font=font, fill=rnd_color2())  # 實(shí)際項(xiàng)目中,會(huì)將驗(yàn)證碼 保存在數(shù)據(jù)庫(kù),并加上時(shí)間字段  print("保存驗(yàn)證碼 {} 到數(shù)據(jù)庫(kù)".format(_str))  # 給圖片加上字符干擾,密集度由 w, h控制  for j in range(0, width, 30):    dis = rnd_dis()    w = t * 15 + j    # 隨機(jī)距離圖片上邊高度,但至少距離30像素    h = random.randint(1, height - 30)    draw.text((w, h), dis, font=font, fill=rndColor())  # 模糊:  image.filter(ImageFilter.BLUR)  # uuid1 生成唯一的字符串作為驗(yàn)證碼圖片名稱  code_name = '{}.jpg'.format(uuid1())  save_dir = './{}'.format(code_name)  image.save(save_dir, 'jpeg')  print("已保存圖片: {}".format(save_dir))# 當(dāng)直接運(yùn)行文件的是和,運(yùn)行下面代碼if __name__ == "__main__":  create_code()
(venv) allenwoo@~/renren/code$ python test.py 保存驗(yàn)證碼 ef3k 到數(shù)據(jù)庫(kù)已保存圖片: ./c86e03c0-1c23-11e7-999d-f45c89c09e61.jpg(venv) allenwoo@~/renren/code$ python test.py 保存驗(yàn)證碼 I37X 到數(shù)據(jù)庫(kù)已保存圖片: ./cb8aed02-1c23-11e7-9b18-f45c89c09e61.jpg(venv) allenwoo@~/renren/code$ python test.py 保存驗(yàn)證碼 vVL1 到數(shù)據(jù)庫(kù)已保存圖片: ./cc120da8-1c23-11e7-b762-f45c89c09e61.jpg(venv) allenwoo@~/renren/code$ python test.py 保存驗(yàn)證碼 K6w3 到數(shù)據(jù)庫(kù)已保存圖片: ./cc891e05-1c23-11e7-b7ec-f45c89c09e61.jpg

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

Python圖片驗(yàn)證碼,Python,驗(yàn)證碼,python識(shí)別圖片驗(yàn)證碼

你覺(jué)得難不難呢?最后這個(gè)生成驗(yàn)證碼代碼中有些邏輯問(wèn)題要理解下

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石门县| 麦盖提县| 绥芬河市| 嘉鱼县| 天水市| 孟津县| 岳池县| 博客| 肇州县| 安图县| 安国市| 兰西县| 银川市| 沾益县| 南城县| 金华市| 唐海县| 郓城县| 南澳县| 丰原市| 福安市| 萨迦县| 中西区| 敖汉旗| 襄城县| 重庆市| 仁怀市| 淳化县| 咸阳市| 河源市| 营口市| 怀柔区| 通江县| 莒南县| 兰坪| 肥乡县| 特克斯县| 沈丘县| 响水县| 大田县| 霍州市|