使用 Python 生成類數字字母混合驗證碼圖片
阿新 • • 發佈:2019-01-01
分析
- 首先是要生成含有數字字母的字串
- 然後建立畫布,並且隨機填充畫布的顏色
- 最後將字元畫上去,為了保證畫上去的字元不同色,需將這些字元儲存為一個列表通過多次畫上去,期間要隨機設定顏色值
在這裡我們通過使用PIL模組來操作影象,random模組進行隨機生成
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
import string
#混合字串,可自定義
basic_string = '0123456789'+string.letters+'9876543210'
def randColor(): #產生隨機顏色
return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
def randChar(): #產生隨機數字字母組合列表
return random.sample(basic_string,4)#chr(random.randint(65,90))
def pictureDraw():
height=60
width=240
image=Image.new('RGB',(width,height),(255,255,255)) #白色畫布
font=ImageFont.truetype("C:/windows/fonts/Arial.ttf" ,36) #畫筆字型
draw=ImageDraw.Draw(image) #繪畫物件
for i in range(width):
for j in range(height):
draw.point((i,j),fill=randColor()) #隨機逐畫素填充顏色
for i in range(4):
draw.text((60*i+10,19),randChar()[i],font=font,fill=(random.randint(30,120),random.randint(30,120 ),random.randint(30,120))) #文字繪畫
image=image.filter(ImageFilter.BLUR) #產生模糊感
image.save('CAPTCHA.jpg','jpeg')
image.show()
if __name__=='__main__':
pictureDraw()
執行結果如下: