最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年05月31日 10:25:18   作者:Woo93  
本篇文章主要介紹了Python簡(jiǎn)單的制作圖片驗(yàn)證碼實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這里示范的驗(yàn)證碼都是簡(jiǎ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 * 4
height = 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

圖片如下:

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

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

隨便加的顏色


我們還可以把背景弄成很多個(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 * 4
height = 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,60
for 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é)果圖片:


PIL制作驗(yàn)證碼

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

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

#!/usr/bin/python
#-*-coding:utf-8-*-
from uuid import uuid1
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
def 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




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

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

相關(guān)文章

  • Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解

    Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解

    今天小編就為大家分享一篇Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • python webp圖片格式轉(zhuǎn)化的方法

    python webp圖片格式轉(zhuǎn)化的方法

    這篇文章主要為大家詳細(xì)介紹了python webp圖片格式轉(zhuǎn)化的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python抓取京東商城手機(jī)列表url實(shí)例代碼

    python抓取京東商城手機(jī)列表url實(shí)例代碼

    python抓取京東商城手機(jī)列表url實(shí)例分享,大家參考使用吧
    2013-12-12
  • JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python中的random.choices函數(shù)用法詳解

    Python中的random.choices函數(shù)用法詳解

    這篇文章主要給大家介紹了關(guān)于Python中random.choices函數(shù)用法的相關(guān)資料,random.random()?的功能是隨機(jī)返回一個(gè)?0-1范圍內(nèi)的浮點(diǎn)數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 使用python把xmind轉(zhuǎn)換成excel測(cè)試用例的實(shí)現(xiàn)代碼

    使用python把xmind轉(zhuǎn)換成excel測(cè)試用例的實(shí)現(xiàn)代碼

    這篇文章主要介紹了使用python把xmind轉(zhuǎn)換成excel測(cè)試用例的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 深入解析Python編程中JSON模塊的使用

    深入解析Python編程中JSON模塊的使用

    這篇文章主要介紹了深入解析Python編程中JSON模塊的使用,舉例講解了如何使用Python解析JSON數(shù)據(jù),需要的朋友可以參考下
    2015-10-10
  • python使用tkinter庫(kù)實(shí)現(xiàn)五子棋游戲

    python使用tkinter庫(kù)實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python使用tkinter庫(kù)實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python實(shí)現(xiàn)人生重開模擬器小游戲講解

    Python實(shí)現(xiàn)人生重開模擬器小游戲講解

    這篇文章主要介紹了Python實(shí)現(xiàn)人生重開模擬器小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • python中celery的基本使用詳情

    python中celery的基本使用詳情

    這篇文章主要介紹了python中celery的基本使用詳情,Celery 是由Python 編寫的簡(jiǎn)單,靈活,可靠的用來(lái)處理大量信息的分布式系統(tǒng),它同時(shí)提供操作和維護(hù)分布式系統(tǒng)所需的工具。Celery 專注于實(shí)時(shí)任務(wù)處理,支持任務(wù)調(diào)度
    2022-09-09

最新評(píng)論

南澳县| 明溪县| 佛坪县| 句容市| 陕西省| 开封县| 比如县| 黑山县| 宜城市| 邹平县| 沂南县| 靖江市| 吉安县| 枣阳市| 陆丰市| 昭通市| 资阳市| 日土县| 库尔勒市| 张家口市| 中牟县| 浦东新区| 体育| 陆良县| 大田县| 定结县| 渑池县| 饶阳县| 庆元县| 宜良县| 兰溪市| 雅安市| 治多县| 连南| 和平区| 叶城县| 章丘市| 湟源县| 正定县| 潍坊市| 新丰县|