python 3 패키지 설명
ubuntu 12.04LST PIL (https://github.com/sloonz/pil-py3k)
필요: 설명http://pillow.readthedocs.org/en/latest/installation.html#linux-installation)
libjpeg8
libjpeg8-dev
libfreetype6
libfreetype6-dev
zlib1g-dev
libtiff4-dev
liblcms1-dev
libwebp-dev
tcl8.5-dev
tk8.5-dev
필요 한 모든 모듈 을 다 설치 하고 이것 을 보 세 요(http://jj.isgeek.net/2011/09/install-pil-with-jpeg-support-on-ubuntu-oneiric-64bits/)
그리고 PIL.
인터넷 에 마음 좋 은 사람 이 쓴 인증 코드 생 성 예 를 붙 여 주세요.
#Fly web app - Verification Code
# -*- coding: utf-8 -*-
import random
from io import BytesIO
import Image, ImageDraw, ImageFont
\#특히 주의 from PIL import Image 와 import Image 의 차 이 는 PIL 패키지 가 import xxx 이기 때문에 from xxx import yy 로 쓸 수 없습니다.
class VCode:
def __init__(self,size=(100,30),length=4,font='',
font_color=(51,102,204),font_size=25,font_bg=(255,255,255),
line=(3,5),pointBorder = (50,47),save_type= 'JPEG',quality=100):
"""
인증번호 생 성 클래스
인자:
size - 그림 높이(width,height)
length-인증번호 길이
font-글꼴 경로
font_color-글꼴 색상(허용:\#FF 0000 또는 RGB)
font_size-글꼴 크기
font_배경 색
line-간섭 선(최소,최대)
pointBorder-산 점(크 면 클 수록 적 음)
save_type-저장 형식
품질-품질
"""
self._size = size
self._font = font
self._font_color = self._str_hex(font_color)
self._font_size = font_size
self._length = length
self._font_bg = self._str_hex(font_bg)
self._save_type = save_type
self._quality = quality
#초기 화
self._im = None
self._draw = None
self._code = ''
self._char = 'abcdefghkmnprstuvwyzABCDEFGHKLMNPRSTUVWYZ23456789'
self._pointBorder = pointBorder
self._line = line
def Generate(self):
"""인증 코드 를 만 들 고 이미지 내용 과 인증 코드 를 되 돌려 줍 니 다.""
#코드 생 성
random_code = self._randomCode()
self._code = '%s' % ''.join(random_code)
code_str = '%s' % ' '.join(random_code)
#이미지 개체
self._im = Image.new('RGB',self._size,self._font_bg)
self._draw = ImageDraw.ImageDraw(self._im)
imFont = ImageFont.truetype(self._font,self._font_size)
w,h = imFont.getsize(self._code)
xy = ((self._size[0]-w)/2,(self._size[1]-h)/2)
self._draw.text(xy,code_str,fill=self._font_color,font=imFont)
#방해 점 을 그리다
self._createPoints()
#방해 선 을 긋다
self._createLines()
#파일 개체
fp = BytesIO()
#그림 저장
self._im.save(fp,self._save_type,quality=self._quality)
return fp.getvalue(),self._code
def _str_hex(self,color):
"""색상 값 을 RGB 로 변환 합 니 다""
if type(color) is str:
color = color.replace('#','')
temp_color = (int(color[0:2],16),int(color[2:4],16),int(color[4:6],16))
else:
temp_color = color
return temp_color
def _randomCode(self):
"""랜 덤 코드 생 성""
return random.sample(self._char,self._length)
def _createPoints(self):
"""점 을 찍다
for x in range(self._size[0]):
for y in range(self._size[1]):
flag = random.randint(0, self._pointBorder[0])
if flag > self._pointBorder[1]:
self._draw.point((x, y), fill = self._randomRGB())
del flag
def _createLines(self):
"""방해 선 그리 기"."
lineNum = random.randint(self._line[0], self._line[1])
for i in range(lineNum):
begin = (random.randint(0, self._size[0]),
random.randint(0, self._size[1])
)
end = (random.randint(0, self._size[0]),
random.randint(0, self._size[1])
)
self._draw.line([begin, end], fill = self._randomRGB())
def _randomRGB(self):
"""랜 덤 으로 RGB 생 성""
return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
if __name__ == "__main__":
verification = VCode(font='font/ARLRDBD.TTF')
im, code = verification.Generate()
with open("test.jpeg", "wb") as f:
f.write(im)
print(code)
tornado 로 render html 는 html 의 python 코드 입 니 다.
Tornado 의 템 플 릿 은 제어 문구 와 표현 문 구 를 지원 합 니 다.제어 문 구 는 사용 합 니 다. {% 화해시키다 %} 싸다 {% if len(items) > 2 %} 。표현 문 {{ 화해시키다 }} 싸다 {{ items[0] }} 。
제어 문과 대응 하 는 Python 문장의 형식 은 기본적으로 완전히 같다.우리들 은 지지한다 if 、 for 、 while 화해시키다 try ,이 문장 들 은 논리 가 끝 나 는 위치 에 사용 해 야 한다. {% end %} 그림 내용 을 표시 할 때.jpeg 에 저장 할 필요 가 없습니다.구체 적 으로 아래 를 참고 하 십시오.http://en.wikipedia.org/wiki/Data_URI_scheme\#HTML 은 mako 로 html 에 python 코드 를 끼 워 넣 습 니 다.http://blog.csdn.net/luanruisong/article/details/9414635
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.