使用python生成隨機圖形驗證碼置逻,需要使用pillow模塊
-
安裝pillow模塊
pip install pillow
-
pillow模塊的基本使用
from PIL import Image,ImageDraw,ImageFont
#使用Image類來實例化一個長為400px鸣剪,寬為400px,基于RGB的(255,255,255)顏色的圖片
img = Image.new(mode="RGB",size=(400,400),color=(255,255,255))
#創(chuàng)建畫筆,用于生成圖片生的內(nèi)容
draw = ImageDraw.Draw(img,mode="RGB")
draw.point([80,80],fill=(0,0,0))
#在(100,100)坐標上生成一個紅點,指定的坐標不能超過圖片的尺寸
draw.point([300,250],fill="red")
draw.line((100,100,100,300),fill="red")
draw.line((100,200,200,100),fill="blue")
#不是生成的圖片保存為png格式
with open("pic.png","wb")as f:
img1.save(f,format="png")
#顯示圖片
img.show()
創(chuàng)建畫筆
draw = ImageDraw.Drwa(img,mode="mode")
在圖片上生成點
#在(100行瑞,100)坐標生生成一個紅點
#注:定義的點的坐標不能超過圖片尺寸
draw.point([100,100],fill="red")
在圖片生畫直線
#第一個括號里面的參數(shù)是坐標,前兩個數(shù)為開始坐標,后兩個數(shù)為結(jié)束坐標
#括號里的第二個參數(shù)指定顏色,可以直接指定,也可以用RGB來表示顏色
draw.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="black")
IBagJ.png
在圖片生畫一個圓
#括號里的第一個參數(shù)是坐標,前兩個是起始坐標,后倆個是結(jié)束坐標
#大括號里的第二個參數(shù)是開始角度蔓同,第三個是結(jié)束角度0到360
drwa.arc((100,100,300,300),0,360,fill="red")
drwa.arc((0,0,300,300),0,90,fill="blue")
IBCa6.png
在圖片上寫文本
#第一個參數(shù)為坐標,第二個參數(shù)為所有生成的文本的內(nèi)容
#第三個參數(shù)為文本的顏色
draw.text([0,0],"python","blue")
IBUJK.png
在圖片上指定的字體生成文本
#實例化一個字體對象,第一個參數(shù)字體的路徑第二個參數(shù)字體大小
font1 = ImageFont.truetype("UKIJtuz.ttf",29)
draw.text([200,200],"linux","red",font=font1)
IBkQa.png
圖片驗證碼的實現(xiàn)
import random
# 導(dǎo)入Image,ImageDraw,ImageFont模塊
from PIL import Image, ImageDraw, ImageFont
# 定義使用Image類實例化一個長為120px,寬為30px,基于RGB的(255,255,255)顏色的圖片
img1 = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
# 實例化一支畫筆
draw1 = ImageDraw.Draw(img1, mode="RGB")
# 定義要使用的字體
font1 = ImageFont.truetype("UKIJTuz.ttf", 28)
for i in range(5):
# 每循環(huán)一次,從a到z中隨機生成一個字母或數(shù)字
# 65到90為字母的ASCII碼,使用chr把生成的ASCII碼轉(zhuǎn)換成字符
# str把生成的數(shù)字轉(zhuǎn)換成字符串
char1 = random.choice([chr(random.randint(65, 90)), str(random.randint(0, 9))])
# 每循環(huán)一次重新生成隨機顏色
color1 = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 圖片長度為120px,要生成5個數(shù)字或字母則每添加一個,其位置就要向后移動24px
draw1.text([i * 24, 0], char1, color1, font=font1)
# 把生成的圖片保存為"pic.png"格式
with open("picb.png", "wb") as f:
img1.save(f, format="png")
IBwce.png
每次運行,程序在程序的同級目錄會生成一個包含隨機字符的小圖片.