亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用python的pillow庫生成圖像驗(yàn)證碼

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

一、pillow庫

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

二、圖像驗(yàn)證碼的分析

首先需要一個(gè)圖像,圖像上需要繪制驗(yàn)證碼,還需要任意多的點(diǎn)和幾條線來造成干擾即可。

三、實(shí)現(xiàn)

1、安裝pillow庫:pip install pillow

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

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

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

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

5、隨機(jī)生成線

6、隨機(jī)生成點(diǎn)

7、生成驗(yàn)證碼圖像,調(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  # 驗(yàn)證碼字符串的長(zhǎng)度
        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個(gè)不重復(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):
            # 生成一個(gè)帶有兩個(gè)元組元素的列表,第一個(gè)元組表示線的開始坐標(biāo),第二個(gè)元組表示線的結(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ī)生成點(diǎn)
    def random_points(self, draw, rate):
        # 因?yàn)閣idth為圖形驗(yàn)證碼的寬,height為圖形驗(yàn)證碼的高,整個(gè)圖都是由點(diǎn)組成的
        # 點(diǎn)的x坐標(biāo)范圍:[0, 圖形的寬度], y的坐標(biāo)范圍:[0, 圖形的高度], 這樣就能遍歷圖像的每一個(gè)像素點(diǎn)
        # rate 用來控制點(diǎn)生成的概率,大約100個(gè)點(diǎn)有rate個(gè)點(diǎn)被選中
        # point方法用來畫點(diǎn),參數(shù)1:點(diǎn)的坐標(biāo), 參數(shù)2:點(diǎn)的顏色
        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))
 
    # 生成驗(yàn)證碼圖片
    def image_code(self):
        # 創(chuàng)建一個(gè)新圖像 參數(shù)1:這個(gè)圖像是RGB模式的,意味著它包含紅色、綠色和藍(lán)色三個(gè)顏色通道,
        # 參數(shù)2:圖像的寬高
        # 參數(shù)3:圖像的初始背景色
        image = Image.new('RGB', (self.width, self.height), (255, 255, 255))
 
        # ImageFont.truetype()加載字體函數(shù),參數(shù)1:字體,去網(wǎng)上找一個(gè)字體即可,參數(shù)2:字體大小
        font = ImageFont.truetype(f'SourceHanSans-Bold.otf', self.size)
 
        # 畫圖
        draw = ImageDraw.Draw(image)
 
        # 在圖上畫線和點(diǎn)
        self.random_lines(draw)
        self.random_points(draw, 15)
 
        # 生成驗(yàn)證碼
        code = self.random_str()
 
        # text函數(shù)用來繪制文本
        # 參數(shù)1:繪制文本的坐標(biāo)
        # 參數(shù)2:文本,這里將4位字符的驗(yàn)證碼拆開繪制
        # 參數(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')
 
        # 返回圖像和驗(yàn)證碼
        return image, code
 
 
if __name__ == '__main__':
    verify = ImageVerify()
    image, text = verify.image_code()
    print(image, text)
 
 
 

總結(jié)

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

相關(guān)文章

  • Python實(shí)現(xiàn)文字pdf轉(zhuǎn)換圖片pdf效果

    Python實(shí)現(xiàn)文字pdf轉(zhuǎn)換圖片pdf效果

    當(dāng)我們把word轉(zhuǎn)化為pdf,wps默認(rèn)轉(zhuǎn)化為文字pdf,而圖片pdf要會(huì)員。所以本文將通過Python語言實(shí)現(xiàn)文字pdf轉(zhuǎn)換圖片pdf,需要的可以參考一下
    2022-04-04
  • python實(shí)現(xiàn)批量改文件名稱的方法

    python實(shí)現(xiàn)批量改文件名稱的方法

    這篇文章主要介紹了python實(shí)現(xiàn)批量改文件名稱的方法,涉及Python中os模塊rename方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python 生成VOC格式的標(biāo)簽實(shí)例

    Python 生成VOC格式的標(biāo)簽實(shí)例

    這篇文章主要介紹了Python 生成VOC格式的標(biāo)簽實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python利用pymysql和openpyxl實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫并插入數(shù)據(jù)

    python利用pymysql和openpyxl實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫并插入數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python連接MySQL數(shù)據(jù)庫,并從Excel文件中讀取數(shù)據(jù),將其插入到MySQL數(shù)據(jù)庫中,有需要的小伙伴可以參考一下
    2023-10-10
  • 速記Python布爾值

    速記Python布爾值

    這篇文章主要介紹了速記Python布爾值,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python中協(xié)程間通信的方式小結(jié)

    Python中協(xié)程間通信的方式小結(jié)

    Python中協(xié)程間的通信方式包括asyncio.Queue、asyncio.Event、asyncio.Condition、asyncio.Semaphore、asyncio.Streams和asyncio.Future,感興趣的可以了解一下
    2025-01-01
  • 使用Python實(shí)現(xiàn)文本情感分析預(yù)處理的詳細(xì)教程

    使用Python實(shí)現(xiàn)文本情感分析預(yù)處理的詳細(xì)教程

    在自然語言處理(NLP)領(lǐng)域,文本情感分析是一項(xiàng)重要任務(wù),它旨在通過計(jì)算機(jī)技術(shù)識(shí)別和提取文本中的情感傾向(如正面、負(fù)面或中性),為了實(shí)現(xiàn)準(zhǔn)確的情感分析,預(yù)處理步驟至關(guān)重要,所以本文給大家介紹了使用Python實(shí)現(xiàn)文本情感分析預(yù)處理的詳細(xì)教程,需要的朋友可以參考下
    2025-04-04
  • 使用Selenium控制當(dāng)前已經(jīng)打開的chrome瀏覽器窗口

    使用Selenium控制當(dāng)前已經(jīng)打開的chrome瀏覽器窗口

    有時(shí)通過selenium打開網(wǎng)站時(shí),發(fā)現(xiàn)有些網(wǎng)站需要掃碼登錄,就很頭疼,導(dǎo)致爬蟲進(jìn)展不下去,下面這篇文章主要給大家介紹了關(guān)于使用Selenium控制當(dāng)前已經(jīng)打開的chrome瀏覽器窗口的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • python 猴子補(bǔ)丁(monkey patch)

    python 猴子補(bǔ)丁(monkey patch)

    這篇文章主要介紹了python 猴子補(bǔ)丁(monkey patch),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python pandas輕松通過特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用

    python pandas輕松通過特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用

    這篇文章主要介紹了python pandas輕松通過特定列的值多條件去篩選數(shù)據(jù)及contains方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論