首頁 >後端開發 >Python教學 >python3 pillow產生驗證碼圖片方法介紹

python3 pillow產生驗證碼圖片方法介紹

巴扎黑
巴扎黑原創
2017-09-20 09:55:102105瀏覽

本篇文章主要介紹了python3 pillow產生簡單驗證碼圖片的範例,非常具有實用價值,需要的朋友可以參考下

使用Python的pillow模組random 模組隨機產生驗證碼圖片,並應用到Django專案中

安裝pillow


#
$ pip3 install pillow

產生驗證碼圖片


#
\vericode.py

from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random

 #随机码 默认长度=1
def random_code(lenght=1):  
  code = ''
  for char in range(lenght):
    code += chr(random.randint(65,90))
  return code

 #随机颜色 默认颜色范围【1,255】
def random_color(s=1,e=255):
  return (random.randint(s,e),random.randint(s,e),random.randint(s,e))

 #生成验证码图片
 #length 验证码长度
 #width 图片宽度
 #height 图片高度
 #返回验证码和图片
def veri_code(lenght=4,width=160,height=40):
  #创建Image对象
  image = Image.new('RGB',(width,height),(255,255,255))
  #创建Font对象
  font = ImageFont.truetype('Arial.ttf',32)
  #创建Draw对象
  draw = ImageDraw.Draw(image)
  #随机颜色填充每个像素
  for x in range(width):
    for y in range(height):
      draw.point((x,y),fill=random_color(64,255))
  #验证码
  code = random_code(lenght)
  #随机颜色验证码写到图片上
  for t in range(lenght):
    draw.text((40*t+5,5),code[t],font=font,fill=random_color(32,127))
  #模糊滤镜
  image = image.filter(ImageFilter.BLUR)
  return code,image

應用程式

寫Django應用程式下的視圖函數


\views.py

from . import vericode.py
from io import BytesIO
from django.http import HttpResponse

def verify_code(request):
  f = BytesIO()
  code,image = vericode.veri_code()
  image.save(f,'jpeg')
  request.session['vericode'] = code
  return HttpResponse(f.getvalue())

def submit_xxx(request):
  if request.method == "POST":
    vericode = request.session.get("vericode").upper()
    submitcode = request.POST.get("vericode").upper()
    if submitcode == vericode:
      return HttpResponse('ok')
  return HttpResponse('error')

這裡使用了Django的session,需要在Django settings. py的INSTALLED_APPS中加入'django.contrib.sessions'(預設新增)
verify_code視圖函數將驗證碼加入session中和驗證碼圖片一起傳送給瀏覽器,當提交表單到submit_xxx()時,先從session中取得驗證碼,再比較從表單中的輸入的驗證碼。

這裡只是簡單說明,url配置和前端程式碼未給。

以上是python3 pillow產生驗證碼圖片方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn