av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:30日期:2022-07-09 10:12:05

前言

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

Pillow的用法參考:https://www.jb51.net/article/196007.htm

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

random的用法參考:https://www.jb51.net/article/196955.htm

一、驗證碼圖片的效果

# coding=utf-8import randomfrom PIL import Image, ImageDraw, ImageFont width, height, font_size, font_num = 300, 100, 48, 5bg_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:WindowsFontsArial.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()

運行結(jié)果:

KG7CQ

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

二、使用的方法介紹

上面的代碼已經(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)用對應(yīng)的方法執(zhí)行繪圖,使用draw對象將驗證碼中的字符畫在畫布上。

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

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

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ù)和關(guān)鍵字參數(shù),不過只有兩個必傳參數(shù),上面的代碼中也只傳了4個參數(shù),所以其他的參數(shù)就不做介紹了。第一個必傳參數(shù)是xy,傳入一個元組或列表,表示字符畫到畫布上的位置坐標(字符左上角),第二個必傳參數(shù)是text,傳入一個字符串,表示需要畫的字符。上面還傳了兩個參數(shù)fill和font,fill表示字符的顏色,傳入一個隨機的顏色,font表示字符的字體,傳入用ImageFont.truetype()函數(shù)返回的字體對象。

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

三、優(yōu)化封裝

import randomfrom 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:WindowsFontsGadugi.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()

運行結(jié)果:

qtC7

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

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

總結(jié)

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

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 超碰97人人人人人蜜桃 | 中文字幕在线一区二区三区 | 精品一区二区三区在线视频 | 亚洲电影一区二区三区 | 国产黑丝av | 岛国视频| av在线播放网址 | 日韩欧美国产一区二区 | 久草福利 | 成人免费在线播放 | 欧美精品一二三 | 欧美视频在线一区 | 国产精品夜夜春夜夜爽久久电影 | 国产美女精品视频免费观看 | 日韩三级免费观看 | 一区二区三区高清不卡 | 久久久久国产一区二区三区四区 | 午夜在线| 亚洲一区二区视频 | 亚洲视频免费观看 | 黄色免费三级 | 亚洲免费视频一区 | 免费精品视频 | 日韩理论电影在线观看 | 国产精品久久久久久影院8一贰佰 | 欧美一级在线观看 | 日韩快播电影 | 看片一区 | 国产精品网址 | 雨宫琴音一区二区在线 | 日日日日日日bbbbb视频 | 国产精品国产三级国产aⅴ无密码 | 午夜综合 | 国产第1页 | 久久国产精品72免费观看 | 成人在线播放 | 黄色网址免费在线观看 | 精品国产91乱码一区二区三区 | 免费成人av | 91久久精品一区二区三区 | 一本久久a久久精品亚洲 |