python隨機生成驗證碼
阿新 • • 發佈:2018-11-11
python隨機生成驗證碼
需要匯入pillow模組
from random import choice, randint
from PIL import Image, ImageDraw, ImageFont, ImageFilter
class VerifyCode(object):
"""生成驗證碼模組"""
def __init__(self, length=4, width=160, height=50, font_size=40):
self._random_code = '' # 驗證碼字串
self._verify_code_image = None # PIL圖片Image物件
self._length = length # 驗證碼長度
self._width = width # 圖片寬度
self._height = height # 圖片高度
self._font_size = font_size # 字型大小
self.random_code() # 初始化驗證碼字元
self.set_image() # 繪製圖片
def random_code(self):
chars = '1234567890qwertyuiopasdfghjklzxcvbnm' # 驗證碼字元庫
code = '' # 生成的驗證碼
for _ in range(self._length): # 迴圈隨機取一個字元
code += choice(chars)
self._random_code = code # 賦值給當前物件的random_code屬性
@staticmethod
def random_color(s=0, e=255):
return randint(0, 256), randint(0, 256), randint(0, 256)
def set_image(self):
# 建立畫布
image = Image.new('RGB', (self._width, self._height), (255, 255, 255))
# 建立字型物件
font = ImageFont.truetype('arial.ttf', self._font_size)
# 建立畫圖物件
draw = ImageDraw.Draw(image)
# 隨機生成噪點
for x in range(self._width):
for y in range(self._height):
temp = x + y + randint(0, 10)
if temp % 10 == 0:
draw.point((x, y), fill=self.random_color(0, 255))
# 字元新增
for t in range(self._length):
dev_x = randint(0, 5) # 隨機左右浮動
dev_y = randint(0, 5) # 隨機上下浮動
x, y = self._font_size * t + dev_x, dev_y
# 將字元通過隨機顏色畫到圖片中
draw.text((x, y), self._random_code[t],
font=font, fill=self.random_color(0, 200))
# 高斯模糊
image = image.filter(ImageFilter.GaussianBlur)
# 將圖片物件賦值給當前物件的verify_code_image屬性
self._verify_code_image = image
@property
def verify_code(self):
return self._random_code
@property
def verify_image(self):
return self._verify_code_image
def get_verify(self):
return self._random_code, self._verify_code_image
if __name__ == '__main__':
v1 = VerifyCode()
print(v1.get_verify())
# ('tspf', <PIL.Image.Image image mode=RGB size=160x50 at 0x1AA45B00D68>)