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

Python利用Pillow(PIL)庫實現(xiàn)驗證碼圖片的全過程

 更新時間:2020年10月04日 11:04:16   作者:Python碎片  
這篇文章主要給大家介紹了關于Python利用Pillow(PIL)庫實現(xiàn)驗證碼圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

Pillow庫有很多用途,本文使用Pillow來生成隨機的驗證碼圖片。

Pillow的用法參考:http://chabaoo.cn/article/196007.htm

驗證碼是隨機的,使用Python內(nèi)置的random庫來生成隨機的顏色和隨機的字符。

random的用法參考:http://chabaoo.cn/article/196955.htm

一、驗證碼圖片的效果

# coding=utf-8
import random
from PIL import Image, ImageDraw, ImageFont
 
 
width, height, font_size, font_num = 300, 100, 48, 5
bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
image = Image.new(mode='RGB', size=(width, height), color=bg_color)
draw = ImageDraw.Draw(image, mode='RGB')
font = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", font_size)
verify = str()
for i in range(font_num):
 x = random.randint(i*(width/font_num), (i+1)*(width/font_num)-font_size)
 y = random.randint(0, height-font_size)
 char = random.choice([chr(alpha) for alpha in range(65, 91)] + [str(num) for num in range(10)])
 verify += char
 color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
 draw.text((x, y), char, fill=color, font=font)
print(verify)
image.show()

運行結果:

KG7CQ

二、使用的方法介紹

上面的代碼已經(jīng)實現(xiàn)了生成隨機驗證碼的功能,現(xiàn)在介紹代碼中用到的函數(shù)和方法。

Image.new(): Image模塊中的new()函數(shù),創(chuàng)建一張圖片(畫布),用于繪圖。傳入3個參數(shù),畫布的模式('RGB'表示真彩圖片)、尺寸和顏色,畫布的顏色就是驗證碼中的背景顏色。

ImageDraw.Draw(): ImageDraw模塊中的Draw()函數(shù),實例化一個ImageDraw類的對象draw,執(zhí)行繪圖。傳入兩個參數(shù),畫布和繪圖的模式,畫布使用前面Image.new()創(chuàng)建的畫布,模式繼續(xù)使用'RGB'真彩模式。Draw()函數(shù)會將傳入的兩個參數(shù)傳給ImageDraw類,實例化一個類對象并返回,以便后面使用類對象draw調(diào)用對應的方法執(zhí)行繪圖,使用draw對象將驗證碼中的字符畫在畫布上。

ImageFont.truetype(): ImageFont模塊中的truetype()函數(shù),從字體文件或字體對象中讀取字體并返回一個字體對象。傳入兩個參數(shù),字體文件(或字體對象)和字體大小。字體只能使用當前電腦支持的字體,在Windows系統(tǒng)中,已安裝的字體一般都保存在C:\Windows\Fonts文件夾中,如上面代碼中的C:\Windows\Fonts\Arial.ttf,應該每個人都默認安裝了,在代碼中一定要帶上擴展名'.ttf',否則讀取不到字體文件。如果字體不在Windows\Fonts這個目錄下,可以在控制面板找或直接在所有文件中搜索Fonts。字體大小傳入一個數(shù)字即可。

random模塊中的randint()和choice()。在上面的代碼中,randint()用于隨機生成顏色值,隨機生成字符在畫布上的x和y坐標。choice()用于從26個大寫字母(chr字符集中65~90為26個大寫字母)和數(shù)字中隨機選擇一個字符。

text(): ImageDraw模塊的ImageDraw類的方法,使用ImageDraw.Draw()返回的類對象draw來調(diào)用,將字符畫到畫布上。text()方法有12個參數(shù),并且還可以接收其他的可變參數(shù)和關鍵字參數(shù),不過只有兩個必傳參數(shù),上面的代碼中也只傳了4個參數(shù),所以其他的參數(shù)就不做介紹了。第一個必傳參數(shù)是xy,傳入一個元組或列表,表示字符畫到畫布上的位置坐標(字符左上角),第二個必傳參數(shù)是text,傳入一個字符串,表示需要畫的字符。上面還傳了兩個參數(shù)fill和font,fill表示字符的顏色,傳入一個隨機的顏色,font表示字符的字體,傳入用ImageFont.truetype()函數(shù)返回的字體對象。

循環(huán)將每次隨機生成的字符繪畫到畫布上,再使用image對象的show()方法將圖片顯示出來,隨機的驗證碼圖片就生成成功了。

三、優(yōu)化封裝

import random
from PIL import Image, ImageDraw, ImageFont
 
 
def gen_verified_image():
 width, height, font_size, font_num = 400, 150, 48, 4
 bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
 image = Image.new(mode='RGB', size=(width, height), color=bg_color)
 draw = ImageDraw.Draw(image, mode='RGB')
 font = ImageFont.truetype("C:\Windows\Fonts\Gadugi.ttf", font_size)
 verify = str()
 for i in range(font_num):
  x = random.randint(i * (width / font_num) + 10, (i + 1) * (width / font_num) - font_size - 10)
  y = random.randint(20, height - font_size - 20)
  char = random.choice([chr(a) for a in range(65, 91)] + [chr(b) for b in range(97, 123)] +
        [str(num) for num in range(10)])
  verify += char
  color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
  draw.text((x, y), char, fill=color, font=font)
 return image, verify
 
 
if __name__ == '__main__':
 image, verify = gen_verified_image()
 print(verify)
 image.show()

運行結果:

qtC7

驗證碼的字體一般不會使用很容易辨認的字體,可以換一個復雜一點的。除了大寫字母之外,也可以把小寫字母加進來。調(diào)整字符的位置避免畫到畫布的邊緣。將代碼封裝到一個函數(shù)中,并將image對象和驗證碼字符verify作為返回值,方便調(diào)用時展示圖片和進行驗證。

總結

到此這篇關于Python利用Pillow(PIL)庫實現(xiàn)驗證碼圖片的文章就介紹到這了,更多相關Python用Pillow(PIL)庫驗證碼圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python定時器實例代碼

    Python定時器實例代碼

    這篇文章主要介紹了Python定時器實例代碼,向大家分享了兩部分代碼示例,一個是通過線程實現(xiàn)定時器timer,另一個是Python實現(xiàn)的精度可調(diào)的定時器實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Python實現(xiàn)批量提取word文件中文本框內(nèi)容

    Python實現(xiàn)批量提取word文件中文本框內(nèi)容

    在日常的辦公中,有時需要提取多個word文件中的文字框的內(nèi)容,這篇文章主要為大家介紹了三種常見的方法來提取文本框的內(nèi)容,希望對大家有一定的幫助
    2024-02-02
  • 詳解OpenCV-Python?Bindings如何生成

    詳解OpenCV-Python?Bindings如何生成

    這篇文章主要為大家介紹了OpenCV-Python?Bindings如何生成過程解析以及如何將新的OpenCV模塊擴展到Python,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Pytorch的torch.utils.data中Dataset以及DataLoader示例詳解

    Pytorch的torch.utils.data中Dataset以及DataLoader示例詳解

    torch.utils.data?是?PyTorch?提供的一個模塊,用于處理和加載數(shù)據(jù),該模塊提供了一系列工具類和函數(shù),用于創(chuàng)建、操作和批量加載數(shù)據(jù)集,這篇文章主要介紹了Pytorch的torch.utils.data中Dataset以及DataLoader等詳解,需要的朋友可以參考下
    2023-08-08
  • Python中的tkinter庫簡單案例詳解

    Python中的tkinter庫簡單案例詳解

    tkinter?是?Python?的標準?GUI?庫,Python?使用?tkinter?可以快速的創(chuàng)建?GUI?應用程序,今天通過本文給大家分享Python中的tkinter庫簡單案例詳解,需要的朋友可以參考下
    2022-01-01
  • Python基于百度AI實現(xiàn)OCR文字識別

    Python基于百度AI實現(xiàn)OCR文字識別

    這篇文章主要介紹了Python基于百度AI實現(xiàn)OCR文字識別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • pytorch實現(xiàn)線性回歸

    pytorch實現(xiàn)線性回歸

    這篇文章主要為大家詳細介紹了pytorch實現(xiàn)線性回歸,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python中使用插入排序算法的簡單分析與代碼示例

    Python中使用插入排序算法的簡單分析與代碼示例

    這篇文章主要介紹了Python使用插入排序算法的簡單分析與代碼示例,插入算法的平均時間復雜度為O(n^2),需要的朋友可以參考下
    2016-05-05
  • python棧的基本定義與使用方法示例【初始化、賦值、入棧、出棧等】

    python棧的基本定義與使用方法示例【初始化、賦值、入棧、出棧等】

    這篇文章主要介紹了python棧的基本定義與使用方法,結合實例形式分析了Python棧的初始化、賦值、入棧、出棧等相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • Django集成搜索引擎Elasticserach的方法示例

    Django集成搜索引擎Elasticserach的方法示例

    這篇文章主要介紹了Django集成搜索引擎Elasticserach的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06

最新評論