Python 사이트 등록 인증 코드 생 성 클래스 구현

본 논문 의 사례 는 Python 사이트 등록 인증 코드 생 성 류 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.

# -*- coding:utf-8 -*-
'''
Created on 2017 4 7 

@author: Water
'''
import os
import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter
from django.conf import settings

 
#     ,           
font_path = os.path.join('/home/workspace/aofeiKart/static', 'fonts/monaco.ttf')#settings.STATIC_ROOT, 'fonts/MONACO.TTF')
font_path = os.path.join(settings.STATIC_ROOT, 'fonts/monaco.ttf')
# print font_path
#         
number = 4
#             
size = (100,30)
#    ,     
bgcolor = (255,255,255)
#    ,     
fontcolor = (0,0,255)
#     。     
linecolor = (255,0,0)
#        
draw_line = True
#           
line_number = (1,5)
 
#           
# source = list(string.ascii_lowercase+'1234567890')
source = list('1234567890')
def gene_text():
#   return '6666'
  return ''.join(random.sample(source,number))#number         
#       
def gene_line(draw,width,height):
  begin = (random.randint(0, width), random.randint(0, height))
  end = (random.randint(0, width), random.randint(0, height))
  draw.line([begin, end], fill = linecolor)
 
#     
def gene_code():
  width,height = size #   
  image = Image.new('RGBA',(width,height),bgcolor) #    
  font = ImageFont.truetype(font_path,25) #      
  draw = ImageDraw.Draw(image) #    
  text = gene_text() #     
  font_width, font_height = font.getsize(text)
  draw.text(((width - font_width) / number, (height - font_height)/number),text,
      font= font,fill=fontcolor) #     
  if draw_line:
    gene_line(draw,width,height)
  image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0), Image.BILINEAR) #    
  image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #  ,    
  image_file = text+'.png'
  
  image_path = os.path.join(settings.STATIC_ROOT, 'images/%s'%image_file)

  image.save(image_path) #       
  
  return 'http://login.chaozu.net:8000/static/images/%s'%image_file, text

if __name__ == "__main__":
  print gene_code()
실현 과정 은 매우 간단 하 다.주로 두 가지 가 있다.
1.PIL 라 이브 러 리 설치,글꼴 저장 디 렉 터 리 설정
2.그림 의 바 이 너 리 데이터 흐름 을 직접 되 돌려 준다 면 다음 과 같 습 니 다.

buf = io.BytesIO() #io.BytesIO() #io.StringIO() use it to fill str obj
image.save(buf, 'png')
request.session['captcha'] = text.lower() 

return HttpResponse(buf.getvalue(), 'image/png') # return the image data stream as image/jpeg format, browser will treat it as an image

 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기