1. 程式人生 > >python實現隨機驗證碼(隨機大小寫字母)

python實現隨機驗證碼(隨機大小寫字母)

python實現隨機驗證碼

需要使用的模組、方法、資料:

1.Image模組:操作影象類

1.1 new():建立一個新的圖片

可實現:建立一個新的圖片

例項:建立一個模式:RGB,大小:400*400,顏色:白色的圖片

from PIL import Image
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(400,400),color=(255,255,255))
# 展示圖片
im.show()

1.2 save():儲存圖片

可實現:將圖片儲存在本地

例項:將上面建立的圖片儲存圖片至預設地址:專案地址,格式:JPEG

from PIL import Image
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(400,400),color=(255,255,255))
# 儲存圖片至預設地址:專案地址,格式:JPEG
im.save("pic.jpg",format="JPEG")

1.3 putpixel():設定畫素點顏色

(1)可實現:對單個畫素點的顏色變化

例項:設定照片的畫素點顏色為:黑色

from PIL import Image
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(400,400),color=(255,255,255))
# 獲取圖片大小,x代表長,y代表寬
x,y = im.size
# 將圖片所有的畫素點都設定為黑色
for i in range(x):
    for j in range(y):
    	# (i,j)代表畫素點位置
    	# (0,0,0)代表黑色
        im.
putpixel((i,j),(0,0,0)) im.show() # 展示圖片

(2)新增random模組,可實現畫素點的多樣性,形成畫素點隨機變換

進而,可實現:圖片背景的隨機性

from PIL import Image
from random
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(400,400),color=(255,255,255))
# 獲取圖片大小,x代表長,y代表寬
x,y = im.size
# 隨機生成圖片所有畫素點的顏色
for i in range(x):
    for j in range(
y): # (i,j)代表畫素點位置 # random.randint(0,255) 代表隨機生成顏色 im.putpixel((i,j),(random.randint(0,255),(random.randint(0,255),random.randint(0,255))) im.show() # 展示圖片

2.ImageDraw模組:在影象上作業

2.2text():寫入文字

可實現:在影象中寫入英文字母

例項:

from PIL import Image,ImageDraw
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(100,50),color=(255,255,255))
# 建立影象繪製物件:PIL.ImageDraw.ImageDraw object
draw = ImageDraw.Draw(im,mode="RGB")
# 使用text方法:將文字:'abcdef',顏色:紅色,放置在影象(0,20)位置,
draw.text((0,20),text = 'abcdef',fill="red")
im.show()

3.ImageFont模組:設定字型(truetype()

可實現:字型的多樣性

例項:

from PIL import Image,ImageDraw,ImageFont
# 建立一個模式:RGB,大小:400*400,顏色:白色的圖片
im = Image.new(mode="RGB",size=(100,50),color=(255,255,255))
draw = ImageDraw.Draw(im,mode="RGB")
# 設定字型格式及字型大小
font1 = ImageFont.truetype("DejaVuSerif-Bold-webfont.ttf",size=20)
draw.text((0,20),text = 'abcdef',fill="red",font=font1)
im.show()

4.random模組:隨機數生成

可實現驗證碼英文字母的多樣性

4.1 random.randint():獲取整型隨機數

可實現:隨機在A-Z中選取一個大寫英文字母

例項:

import random
# 隨機在A-Z中選取一個大寫英文字母
print(chr(random.randint(65,90)))

4.2random.choice() :獲取隨機獲取列表中的隨機數

可實現:驗證碼英文大小字母的多樣性

import random
# 隨機在大寫字母和小寫字母之間選擇一個字母
print(random.choice([chr(random.randint(65,90)),chr(random.randint(97,122))]))

chr(random.randint(65,90)):隨機選取一個大寫字母

chr(random.randint(97,122)):隨機選取一個小寫字母

random.choice([chr(random.randint(65,90)),chr(random.randint(97,122))])

在隨機選取的大寫字母和隨機選取的小寫字母之間選取一個字母

5.字型檔案

可在本機檔案中搜索ttf,或者在網上下載一個字型檔案,在本例項中,使用的是DejaVuSerif-Bold-webfont.ttf

6.char碼值對應列表

65-90==A-Z

97-122 對應 a-z

例項1:隨機生成二維碼:大小寫字母(程式碼)

from PIL import Image,ImageDraw,ImageFont
import random
# 建立一個空白圖片,模式為RGB,大小為120*30
im = Image.new('RGB',(200,50),color =(255,255,255))
# 建立畫筆
draw = ImageDraw.Draw(im,mode="RGB")
x,y = im.size
# 生成隨機背景
for i in range(x):
    for j in range(y):
        # 設定畫素點的顏色
        im.putpixel([i, j], (random.randint(0,255),random.randint(0,255),random.randint(0,255)))
# 設定字型
font1 = ImageFont.truetype('DejaVuSerif-Bold-webfont.ttf',30)
# 寫入文字
count = 0 # 寫入圖片的位置
# 生成5個字母
for i in range(5):
    # 生成隨機大小寫字母文字
    char1 = random.choice([chr(random.randint(65,90)),chr(random.randint(97,122))])
    # 寫入文字,位置均勻分佈在影象上,顏色隨機(0,255),字型為font1,
    draw.text((count, 10), char1, fill=random.randint(0,255), font=font1)
    count += x//5 # 寫入五個字母,均勻分佈字母至圖片
# 畫兩條阻礙字母的隨機橫線,隨機顏色 ,寬度為3
# 隨機橫線取值:random.randint(y-30,y-10):字型=20,y=50 :y-30:為與字型的最上方,y-10為與字型的最下方
draw.line((0,random.randint(y-30,y-10),x,random.randint(y-30,y-10)),fill=random.randint(50,200),width=3)
draw.line((0,random.randint(y-30,y-10),x,random.randint(y-30,y-10)),fill=random.randint(100,255),width=3)
# 展示圖片
im.show()

輸出圖片樣式:

隨機畫素點背景+隨機大小寫字母+隨機字母顏色+隨機模糊橫線*2

在這裡插入圖片描述