亚洲ww无码ww专区1234_亚洲AV综合色区无码三区30p_丰满二级精品一区_美女黄频视频大全免费的正片_久久综合九色综合网站

接單日記(四)驗(yàn)證碼圖片生成-當(dāng)前簡訊

2023-05-15 13:35:07    來源:博客園


(相關(guān)資料圖)

目錄
  • 接單日記(四)驗(yàn)證碼圖片生成
    • 一、 實(shí)驗(yàn)?zāi)康?/li>
    • 二、 實(shí)驗(yàn)內(nèi)容
    • 三、 程序及結(jié)果
      • 1、 運(yùn)行程序
      • 2、 運(yùn)行結(jié)果

接單日記(四)驗(yàn)證碼圖片生成

此為一個(gè)實(shí)驗(yàn)報(bào)告,故遵守實(shí)驗(yàn)報(bào)告的格式。

二、 實(shí)驗(yàn)內(nèi)容

編寫程序,繪制一個(gè)驗(yàn)證碼圖片,要求圖片的背景為白色,同時(shí)該驗(yàn)證碼有隨機(jī)四位字母或者數(shù)字組成,在圖片上還需要有干擾線,可以不需要干擾點(diǎn)。

三、 程序及結(jié)果

1、 運(yùn)行程序

#!/usr/bin/env python# -*- coding: UTF-8 -*-# @author: A.L.Kun# @file: Verification.py# @time: 2023/4/19 15:15from random import choice, randintfrom PIL import Image, ImageDraw, ImageFontclass Verification:    """生成驗(yàn)證碼圖片的類"""    def __init__(self, n, draw_line, size, font_path, bgcolor, path):        self.draw_line = draw_line  # 是否添加干擾線        self.n = n  # 生成即為驗(yàn)證碼        self.lis_all_code = []  # 存儲(chǔ)獲得的字母和數(shù)字        self.getAllCode()  # 調(diào)用方法生成        self.bgcolor = bgcolor  # 背景顏色        # print(self.lis_all_code)  # 檢測生成的字母和數(shù)字        self.ret = ""  # 保存生成的驗(yàn)證碼        self.size = size  # 設(shè)置大小        self.font = font_path  # 設(shè)置字體        self.save_path = path  # 存儲(chǔ)的路徑    def getAllCode(self):        """獲得所有字母和數(shù)字,存儲(chǔ)在列表中"""        for i in range(48, 58):            self.lis_all_code.append(chr(i))        for i in range(65, 91):            self.lis_all_code.append(chr(i))            self.lis_all_code.append(chr(i + 32))    def add_line(self, pen):        """添加干擾線,要傳入畫筆"""        for i in range(randint(4, 8)):  # 隨機(jī)生成四到八條干擾線            # 顏色隨機(jī)            randColor = (randint(0, 255), randint(0, 255), randint(0, 255))            # 起點(diǎn)隨機(jī)            start = (randint(0, self.size[0]), randint(0, self.size[1]))            # 終點(diǎn)隨機(jī)            end = (randint(0, self.size[0]), randint(0, self.size[1]))            # 畫一條線            pen.line([start, end], fill=randColor)    def add_point(self, pen):        """添加干擾點(diǎn),傳入畫筆"""        for i in range(randint(20, 24)):  # 生成隨機(jī)個(gè)干擾點(diǎn)            # 顏色隨機(jī)            randColor = (randint(0, 255), randint(0, 255), randint(0, 255))            # 起點(diǎn)隨機(jī)            point = (randint(0, self.size[0]), randint(0, self.size[1]))            pen.point(point, fill=randColor)    def getImg(self):        """獲取驗(yàn)證碼圖片"""        img = Image.new("RGBA", self.size, self.bgcolor)  # 創(chuàng)建一個(gè)圖片        pen = ImageDraw.Draw(img)  # 創(chuàng)建一個(gè)畫筆        font = ImageFont.truetype(self.font, 25)  # 實(shí)例化字體        for i in range(self.n):  # 把文字寫入圖片中            string = choice(self.lis_all_code)  # 生成隨機(jī)的驗(yàn)證碼            self.ret += string  # 添加到結(jié)果中            font_color = (randint(0, 255), randint(0, 255), randint(0, 255))  # 顏色隨機(jī)            # 驗(yàn)證碼的初始橫軸偏移量            x_start = randint(2, 5)            # 驗(yàn)證碼的初始縱軸偏移量            y_start = 0            x = x_start + i * (self.size[0] // self.n)  # 獲取每個(gè)字橫坐標(biāo)的位置            y = randint(y_start, self.size[1] // 2) - 3  # 獲取每個(gè)字縱坐標(biāo)的位置            pen.text([x, y], string, font=font, fill=font_color)  # 寫入每一個(gè)字        if self.draw_line:  # 如果要加干擾點(diǎn)線            self.add_line(pen)            self.add_point(pen)        return img    def main(self):        """入口函數(shù)"""        img = self.getImg()  # 獲取圖片        img.save(self.save_path)  # 保存圖片,因?yàn)槔锩嬗兴纳ǖ?,所以要保存為png格式        ret = self.ret        self.ret = ""  # 重置 self.ret 的值        return ret  # 同時(shí)要返回隨機(jī)的字符串if __name__ == "__main__":    c = Verification(4, True, (100, 36), r"C:\Windows\Fonts\simfang.ttf", (255, 255, 255), "verify.png")    print(c.main())

2、 運(yùn)行結(jié)果

關(guān)鍵詞:

X 關(guān)閉

財(cái)經(jīng) 查看更多
安陽曹操墓將于2022年5月正式對公眾開放
時(shí)間·2021-12-29    來源·中新網(wǎng)
為什么這次寒潮南方降雪這么明顯?
時(shí)間·2021-12-29    來源·新華社
山西絳縣6名失蹤者全部遇難 當(dāng)?shù)兀阂蚜刚{(diào)查
時(shí)間·2021-12-29    來源·中新網(wǎng)

X 關(guān)閉