python實現隨機驗證碼(隨機大小寫字母)
阿新 • • 發佈:2018-12-15
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