欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 生成圖形驗(yàn)證碼的方法示例

 更新時(shí)間:2018年11月11日 16:57:50   作者:春風(fēng)十里不如認(rèn)識你  
日常在網(wǎng)站使用過程中經(jīng)常遇到圖形驗(yàn)證,這篇文章主要介紹了python 生成圖形驗(yàn)證碼的方法示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

日常在網(wǎng)站使用過程中經(jīng)常遇到圖形驗(yàn)證,今天準(zhǔn)備自己做個(gè)圖形驗(yàn)證碼,這算是個(gè)簡單的功能,也適合新手練習(xí)的,便于自己學(xué)習(xí)。

主要用到的庫--PIL圖像處理庫,簡單的思路,我們需要隨機(jī)的顏色,隨機(jī)的數(shù)字或字母,隨機(jī)的線條、點(diǎn)作為干擾元素 拼湊成一張圖片。

生成隨機(jī)顏色,返回的是rgb三色。

def getRandomColor():
  r = random.randint(0, 255)
  g = random.randint(0, 255)
  b = random.randint(0, 255)
  return (r, g, b)

從數(shù)字、大小寫字母里生成隨機(jī)字符。

def getRandomChar():
  random_num = str(random.randint(0, 9))
  random_lower = chr(random.randint(97, 122)) # 小寫字母a~z
  random_upper = chr(random.randint(65, 90)) # 大寫字母A~Z
  random_char = random.choice([random_num, random_lower, random_upper])
  return random_char

圖片操作,生成一張隨機(jī)背景色的圖片,隨機(jī)生成5種字符+5種顏色,在圖片上描繪字,由于默認(rèn)的字體很小,還需要對字進(jìn)行處理,不同系統(tǒng)下的字體文件存放位置不一樣,這里我是把window下的 arial.ttf 字體復(fù)制到了當(dāng)前文件夾下直接使用的。

# 圖片寬高
width = 160
height = 50

def createImg():
  bg_color = getRandomColor()
  # 創(chuàng)建一張隨機(jī)背景色的圖片
  img = Image.new(mode="RGB", size=(width, height), color=bg_color)
  # 獲取圖片畫筆,用于描繪字
  draw = ImageDraw.Draw(img)
  # 修改字體
  font = ImageFont.truetype(font="arial.ttf", size=36)
  for i in range(5):
    # 隨機(jī)生成5種字符+5種顏色
    random_txt = getRandomChar()
    txt_color = getRandomColor()
    # 避免文字顏色和背景色一致重合
    while txt_color == bg_color:
      txt_color = getRandomColor()
    # 根據(jù)坐標(biāo)填充文字
    draw.text((10 + 30 * i, 3), text=random_txt, fill=txt_color, font=font)
  # 打開圖片操作,并保存在當(dāng)前文件夾下
  with open("test.png", "wb") as f:
    img.save(f, format="png")

這個(gè)時(shí)候可以看到文件夾下面的圖片

這里是張很清晰的圖片,為了有干擾元素,這里還需要在圖片加入些線條、點(diǎn)作為干擾點(diǎn)。

隨機(jī)畫線,在圖片寬高范圍內(nèi)隨機(jī)生成2個(gè)坐標(biāo)點(diǎn),并通過隨機(jī)顏色產(chǎn)生線條。

def drawLine(draw):
  for i in range(5):
    x1 = random.randint(0, width)
    x2 = random.randint(0, width)
    y1 = random.randint(0, height)
    y2 = random.randint(0, height)
    draw.line((x1, y1, x2, y2), fill=getRandomColor())

隨機(jī)畫點(diǎn),隨機(jī)生成橫縱坐標(biāo)點(diǎn)。

def drawPoint(draw):
  for i in range(50):
    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.point((x,y), fill=getRandomColor())

生成方法

def createImg():
  bg_color = getRandomColor()
  # 創(chuàng)建一張隨機(jī)背景色的圖片
  img = Image.new(mode="RGB", size=(width, height), color=bg_color)
  # 獲取圖片畫筆,用于描繪字
  draw = ImageDraw.Draw(img)
  # 修改字體
  font = ImageFont.truetype(font="arial.ttf", size=36)
  for i in range(5):
    # 隨機(jī)生成5種字符+5種顏色
    random_txt = getRandomChar()
    txt_color = getRandomColor()
    # 避免文字顏色和背景色一致重合
    while txt_color == bg_color:
      txt_color = getRandomColor()
    # 根據(jù)坐標(biāo)填充文字
    draw.text((10 + 30 * i, 3), text=random_txt, fill=txt_color, font=font)
  # 畫干擾線點(diǎn)
  drawLine(draw)
  drawPoint(draw)
  # 打開圖片操作,并保存在當(dāng)前文件夾下
  with open("test.png", "wb") as f:
    img.save(f, format="png")

最終生成的圖片


這里介紹的是圖片生成的方法,可以將圖片直接顯示在前端,也可以使用接口返回url。用Django做的,需要注意的是圖片保存的路徑。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 將labelme格式數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)的coco數(shù)據(jù)集格式方式

    將labelme格式數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)的coco數(shù)據(jù)集格式方式

    今天小編就為大家分享一篇將labelme格式數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)的coco數(shù)據(jù)集格式方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用Python對文件進(jìn)行批量改名的方法

    使用Python對文件進(jìn)行批量改名的方法

    這篇文章主要介紹了使用Python對文件進(jìn)行批量改名的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python os.path.exists()函數(shù)總是返回false的解決方案

    Python os.path.exists()函數(shù)總是返回false的解決方案

    這篇文章主要介紹了Python os.path.exists()函數(shù)總是返回false的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python基礎(chǔ)之內(nèi)置模塊詳解

    Python基礎(chǔ)之內(nèi)置模塊詳解

    Python內(nèi)置的模塊有很多,我們也已經(jīng)接觸了不少相關(guān)模塊,接下來咱們就來做一些項(xiàng)目開發(fā)中常用的模塊匯總和介紹,需要的朋友可以參考下
    2021-06-06
  • Django中URLconf和include()的協(xié)同工作方法

    Django中URLconf和include()的協(xié)同工作方法

    這篇文章主要介紹了Django中URLconf和include()的協(xié)同工作方法,Django是Python眾人氣框架中最著名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 撤回我也能看到!教你用Python制作微信防撤回腳本

    撤回我也能看到!教你用Python制作微信防撤回腳本

    如果好友短時(shí)間發(fā)送多條消息然后撤回會(huì)難以判斷究竟撤回的是哪條信息,只能靠猜.后來我覺得“猜”這個(gè)事情特別不Pythonic,研究一段時(shí)間后找到了解決方案,不得不驚嘆ItChat真的好強(qiáng)大,需要的朋友可以參考下
    2021-06-06
  • 利用Python寫一場新年煙花秀

    利用Python寫一場新年煙花秀

    這篇文章主要介紹了利用Python寫一場新年煙花秀,可以送給朋友還可以當(dāng)作練習(xí),Python 模塊包括:tkinter、PIL、time、random、math,下面來看一下代碼實(shí)現(xiàn),需要的朋友可以參考一下
    2022-01-01
  • webdriver.Chrome()沒反應(yīng)解決詳細(xì)圖文教程

    webdriver.Chrome()沒反應(yīng)解決詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于webdriver.Chrome()沒反應(yīng)的解決辦法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-03-03
  • Django 實(shí)現(xiàn)jwt認(rèn)證的示例

    Django 實(shí)現(xiàn)jwt認(rèn)證的示例

    這篇文章主要介紹了Django 實(shí)現(xiàn)jwt 認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用django,感興趣的朋友可以了解下
    2021-04-04
  • Python設(shè)計(jì)模式之代理模式實(shí)例詳解

    Python設(shè)計(jì)模式之代理模式實(shí)例詳解

    這篇文章主要介紹了Python設(shè)計(jì)模式之代理模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了代理模式的概念、原理及Python定義、使用代理模式相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論