亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python利用Pillow(PIL)庫實現驗證碼圖片的示例

發布時間:2020-10-29 16:10:37 來源:億速云 閱讀:246 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Python利用Pillow(PIL)庫實現驗證碼圖片的示例,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、驗證碼圖片的效果

# 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

Python利用Pillow(PIL)庫實現驗證碼圖片的示例

二、使用的方法介紹

上面的代碼已經實現了生成隨機驗證碼的功能,現在介紹代碼中用到的函數和方法。

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

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

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

Python利用Pillow(PIL)庫實現驗證碼圖片的示例

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

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

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

三、優化封裝

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

Python利用Pillow(PIL)庫實現驗證碼圖片的示例

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

看完上述內容,你們對Python利用Pillow(PIL)庫實現驗證碼圖片的示例有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清流县| 潜江市| 麻江县| 枣庄市| 太仓市| 墨玉县| 财经| 六枝特区| 荔浦县| 苍南县| 吉木乃县| 岳阳县| 卢龙县| 景洪市| 嘉善县| 吉安市| 上高县| 巨鹿县| 新营市| 峨边| 麻阳| 丰原市| 布尔津县| 四子王旗| 阳城县| 河东区| 清徐县| 新晃| 广平县| 延津县| 广南县| 四平市| 武鸣县| 重庆市| 巴彦淖尔市| 合作市| 汽车| 垣曲县| 大冶市| 清河县| 三亚市|