1. 程式人生 > >python隨機生成驗證碼

python隨機生成驗證碼

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>)