最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用python的pillow庫生成圖像驗證碼

 更新時間:2025年01月20日 09:02:29   作者:_BooI  
Pillow庫是一個強大的Python圖像處理庫,用于生成圖像驗證碼,通過初始化圖像大小、驗證碼字符長度和字體大小,生成隨機(jī)字符串、顏色、線和點,最終生成驗證碼圖像

一、pillow庫

Pillow庫:是一個功能強大的Python圖像處理庫,它提供了豐富的圖像處理功能,使得用戶能夠方便地使用Python對圖像進(jìn)行各種操作。

二、圖像驗證碼的分析

首先需要一個圖像,圖像上需要繪制驗證碼,還需要任意多的點和幾條線來造成干擾即可。

三、實現(xiàn)

1、安裝pillow庫:pip install pillow

使用一個類來實現(xiàn)圖像驗證碼的生成

2、構(gòu)造方法__init__, 初始化圖像的寬、高,驗證碼字符長度、以及字體的大小。

3、隨機(jī)生成length長的字符串

4、隨機(jī)生成顏色

5、隨機(jī)生成線

6、隨機(jī)生成點

7、生成驗證碼圖像,調(diào)用上面編寫好的方法

四、效果展示

五、代碼

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import string
 
class ImageVerify:
    def __init__(self, length=4, width=100, height=50, size=18):
        self.length = length  # 驗證碼字符串的長度
        self.width = width  # 圖片的寬
        self.height = height  # 圖片的高
        self.size = size  # 字體的大小
 
    # 隨機(jī)生成字符串
    def random_str(self):
        # string.ascii_letters包含字母的大小寫,值為abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
        # source = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
        source = string.ascii_letters + '0123456789'
        # 隨機(jī)從source中獲取length個不重復(fù)的元素,然后拼接
        return ''.join(random.sample(source, self.length))
 
    # 隨機(jī)生成顏色
    def random_color(self, start=0, end=255):
        # 元組推導(dǎo)式,(a, b, c), a, b, c默認(rèn)范圍為0~255, 就是RGB
        res = (random.randint(start, end) for i in range(3))
        return tuple(res)
 
    # 隨機(jī)生成線
    def random_lines(self, draw):
        #  在圖片上隨機(jī)位置上生成4條線
        for i in range(self.length):
            # 生成一個帶有兩個元組元素的列表,第一個元組表示線的開始坐標(biāo),第二個元組表示線的結(jié)束坐標(biāo)
            lines = [(random.randint(0, self.width), random.randint(0, self.height)) for i in range(2)]
            # line方法用來繪制線條,參數(shù)一:線的起始位置和結(jié)束位置,參數(shù)2:顏色,參數(shù)3:線的寬度
            draw.line(lines, fill=self.random_color(64, 255), width=2)
 
    # 隨機(jī)生成點
    def random_points(self, draw, rate):
        # 因為width為圖形驗證碼的寬,height為圖形驗證碼的高,整個圖都是由點組成的
        # 點的x坐標(biāo)范圍:[0, 圖形的寬度], y的坐標(biāo)范圍:[0, 圖形的高度], 這樣就能遍歷圖像的每一個像素點
        # rate 用來控制點生成的概率,大約100個點有rate個點被選中
        # point方法用來畫點,參數(shù)1:點的坐標(biāo), 參數(shù)2:點的顏色
        for x in range(self.width):
            for y in range(self.height):
                if random.randint(1, 100) <= rate:
                    draw.point((x, y), fill=self.random_color(64, 255))
 
    # 生成驗證碼圖片
    def image_code(self):
        # 創(chuàng)建一個新圖像 參數(shù)1:這個圖像是RGB模式的,意味著它包含紅色、綠色和藍(lán)色三個顏色通道,
        # 參數(shù)2:圖像的寬高
        # 參數(shù)3:圖像的初始背景色
        image = Image.new('RGB', (self.width, self.height), (255, 255, 255))
 
        # ImageFont.truetype()加載字體函數(shù),參數(shù)1:字體,去網(wǎng)上找一個字體即可,參數(shù)2:字體大小
        font = ImageFont.truetype(f'SourceHanSans-Bold.otf', self.size)
 
        # 畫圖
        draw = ImageDraw.Draw(image)
 
        # 在圖上畫線和點
        self.random_lines(draw)
        self.random_points(draw, 15)
 
        # 生成驗證碼
        code = self.random_str()
 
        # text函數(shù)用來繪制文本
        # 參數(shù)1:繪制文本的坐標(biāo)
        # 參數(shù)2:文本,這里將4位字符的驗證碼拆開繪制
        # 參數(shù)3:字體
        # 參數(shù)4:顏色
        for i in range(self.length):
            draw.text((29 * i, 14), code[i], font=font, fill=self.random_color(32, 127))
 
        # 給圖像濾鏡
        image = image.filter(ImageFilter.DETAIL)
 
        # 保存圖像到當(dāng)前路徑
        image.save(f'[code].jpg')
 
        # 返回圖像和驗證碼
        return image, code
 
 
if __name__ == '__main__':
    verify = ImageVerify()
    image, text = verify.image_code()
    print(image, text)
 
 
 

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實現(xiàn)坦克大戰(zhàn)游戲 附詳細(xì)注釋

    python實現(xiàn)坦克大戰(zhàn)游戲 附詳細(xì)注釋

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python subprocess模塊功能與常見用法實例詳解

    Python subprocess模塊功能與常見用法實例詳解

    這篇文章主要介紹了Python subprocess模塊功能與常見用法,結(jié)合實例形式詳細(xì)分析了subprocess模塊功能、常用函數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2018-06-06
  • 深入剖析Python的列表和元組

    深入剖析Python的列表和元組

    這篇文章主要介紹了深入剖析Python的列表和元組,Python有4個內(nèi)建的數(shù)據(jù)結(jié)構(gòu),它們可以統(tǒng)稱為容器,因為它們實際上是一些“東西”組合而成的結(jié)構(gòu),而這些“東西”,可以是數(shù)字、字符甚至列表,或是它們的組合,需要的朋友可以參考下
    2023-07-07
  • python polars數(shù)據(jù)科學(xué)庫對比Pandas優(yōu)勢分析

    python polars數(shù)據(jù)科學(xué)庫對比Pandas優(yōu)勢分析

    這篇文章主要為大家介紹了python polars數(shù)據(jù)科學(xué)庫對比Pandas優(yōu)勢分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python使用SciencePlots庫繪制學(xué)術(shù)圖表詳解

    Python使用SciencePlots庫繪制學(xué)術(shù)圖表詳解

    這篇文章主要介紹了Python使用SciencePlots庫繪制學(xué)術(shù)圖表,SciencePlots提供了一系列預(yù)設(shè)的科學(xué)繪圖樣式,能夠幫助研究人員輕松創(chuàng)建專業(yè)的學(xué)術(shù)圖表,需要的朋友可以參考下
    2025-04-04
  • Tensorflow?2.1完成對MPG回歸預(yù)測詳解

    Tensorflow?2.1完成對MPG回歸預(yù)測詳解

    這篇文章主要為大家介紹了Tensorflow?2.1完成對MPG回歸預(yù)測詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Python 數(shù)據(jù)分析之Beautiful Soup 提取頁面信息

    Python 數(shù)據(jù)分析之Beautiful Soup 提取頁面信息

    Beautiful Soup 提供一些簡單的、python 式的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因為簡單,所以不需要多少代碼就可以寫出一個完整的應(yīng)用程序
    2021-10-10
  • Python中使用item()方法遍歷字典的例子

    Python中使用item()方法遍歷字典的例子

    這篇文章主要介紹了Python中使用item()方法遍歷字典的例子,for...in這種是Python中最常用的遍歷字典的方法了,需要的朋友可以參考下
    2014-08-08
  • python3 traceback模塊來追蹤和打印異常信息

    python3 traceback模塊來追蹤和打印異常信息

    本文主要介紹了python3 traceback模塊來追蹤和打印異常信息,這個模塊提供了許多函數(shù)來處理異常,并且能夠輸出異常的堆棧信息,感興趣的可以了解一下
    2024-02-02
  • Python 實現(xiàn)圖像逐像素點取鄰域數(shù)據(jù)

    Python 實現(xiàn)圖像逐像素點取鄰域數(shù)據(jù)

    這篇文章主要介紹了Python 實現(xiàn)圖像逐像素點取鄰域數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

木兰县| 巴彦淖尔市| 兴业县| 金山区| 石台县| 壶关县| 运城市| 阿图什市| 大同市| 泰兴市| 高雄市| 鹤峰县| 屯门区| 江山市| 沈丘县| 米泉市| 花莲市| 齐齐哈尔市| 武城县| 安西县| 西林县| 罗平县| 棋牌| 棋牌| 定结县| 宁波市| 泗洪县| 惠安县| 宿迁市| 台东市| 新兴县| 自治县| 通化市| 历史| 巨野县| 松滋市| 潜江市| 青冈县| 额敏县| 普兰店市| 垣曲县|