国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python PIL模塊與隨機生成中文驗證碼

2020-01-04 17:41:41
字體:
來源:轉載
供稿:網友
今天我們要學習的內容是如何利用Python生成一個隨機的中文驗證碼,并將圖片保存為.jpeg格式,需要的朋友可以參考下
 

在這之前,你首先得了解Python中的PIL庫。PIL是Python Imaging Library的簡稱,PIL是一個Python處理圖片的庫,提供了一系列模塊和方法,比如:裁切,平移,旋轉,改變尺寸等等。在PIL庫中,任何一個圖像都是用Image對象來表示的,所以要加載一張圖片,最簡單的形式如下:

from PIL import Imageimage = Image.open("1.jpeg")

在PIL庫中,最常用的模塊有Image,ImageDraw,ImageEnhance,ImageFile等。
PIL的下載地址為:http://www.pythonware.com/products/pil/
接下來學習PIL中一些常見的操作:

(1)改變圖片大小

from PIL import Imageimage = Image.open("1.jpeg")new_img = image.resize((256,256),Image.BILINEAR)new_img.save("2.jpeg")

(2)旋轉圖片

from PIL import Imageimage = Image.open("1.jpeg")new_img = image.rotate(45)new_img.save("2.jpeg")

(3)直線繪制

PIL庫中的ImageDraw模塊提供了圖形繪制的基本功能,可以繪制直線,弧線,橢圓,矩形等等。

from PIL import Image,ImageDrawimage = Image.open("2.jpeg")draw = ImageDraw.Draw(image)width,height = image.sizedraw.line(((0,0),(width-1,height-1)),fill=255)draw.line(((0,height-1),(width-1,0)),fill=255)image.save("2.jpeg")

(4)繪制圓

from PIL import Image,ImageDrawimage = Image.open("2.jpeg")draw = ImageDraw.Draw(image)width,height = image.sizedraw.arc((0,0,width-1,height-1),0,360,fill=255)image.save("2.jpeg")

更多方法可以參見幫助文檔。

 

現在我們來研究利用Python如何生成中文驗證碼。其實這個問題簡單,我們都知道驗證碼一般是用來防止網絡機器

人采用無限次數的登錄嘗試破解密碼,那么我們需要對這張圖片隨機生成中文字符來驗證,一般來說會把圖片的字表

現得很模糊,這樣有效地防止機器人識別。所以我們除了要隨機生成漢字,還要加入一些干擾線條等等。

# -*- coding: utf-8 -*-from PIL import Image,ImageDraw,ImageFontimport randomimport math, string class RandomChar(): @staticmethod def Unicode():  val = random.randint(0x4E00, 0x9FBF)  return unichr(val)  @staticmethod def GB2312():  head = random.randint(0xB0, 0xCF)  body = random.randint(0xA, 0xF)  tail = random.randint(0, 0xF)  val = ( head << 8 ) | (body << 4) | tail  str = "%x" % val  return str.decode('hex').decode('gb2312') class ImageChar: def __init__(self, fontColor = (0, 0, 0),           size = (100, 40),           fontPath = 'SIMSUN.TTC',           bgColor = (255, 255, 255),           fontSize = 20):  self.size = size  self.fontPath = fontPath  self.bgColor = bgColor  self.fontSize = fontSize  self.fontColor = fontColor  self.font = ImageFont.truetype(self.fontPath, self.fontSize)  self.image = Image.new('RGB', size, bgColor)  def rotate(self):  self.image.rotate(random.randint(0, 30), expand=0)  def drawText(self, pos, txt, fill):  draw = ImageDraw.Draw(self.image)  draw.text(pos, txt, font=self.font, fill=fill) def randRGB(self):  return (random.randint(0, 255),      random.randint(0, 255),      random.randint(0, 255))  def randPoint(self):  (width, height) = self.size  return (random.randint(0, width), random.randint(0, height))  def randLine(self, num):  draw = ImageDraw.Draw(self.image)  for i in range(0, num):   draw.line([self.randPoint(), self.randPoint()], self.randRGB()) def randChinese(self, num):  gap = 5  start = 0  for i in range(0, num):   char = RandomChar().GB2312()   x = start + self.fontSize * i + random.randint(0, gap) + gap * i   self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())   self.rotate()  self.randLine(18)  def save(self, path):  self.image.save(path)ic = ImageChar(fontColor=(100,211, 90))ic.randChinese(4)ic.save("1.jpeg")

運行結果:

python PIL模塊與隨機生成中文驗證碼


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎兰屯市| 涿鹿县| 焉耆| 龙井市| 平乡县| 土默特左旗| 增城市| 滕州市| 桐城市| 开阳县| 寿阳县| 民县| 麻栗坡县| 富锦市| 沛县| 盘锦市| 逊克县| 台州市| 西乌珠穆沁旗| 思茅市| 武陟县| 呼玛县| 太白县| 莱芜市| 哈巴河县| 玛沁县| 连城县| 广南县| 西和县| 天津市| 宁津县| 武宁县| 大丰市| 通山县| 天台县| 丰台区| 青州市| 镇雄县| 北票市| 韶山市| 稻城县|