對于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
再貼下網(wǎng)上有好心人寫的 生成驗證碼的例子
#Fly web app - Verification Code
# -*- coding: utf-8 -*-
import random
from io import BytesIO
import Image, ImageDraw, ImageFont
# 特別注意 from PIL import Image 和 import Image的區(qū)別 由于PIL包都是import xxx 所以我們不能寫成from xxx import yyy
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):
"""
驗證碼生成類
參數(shù):
size - 圖片高寬(width,height)
length - 驗證碼長度
font - 字體路徑
font_color - 字體顏色(允許是: #FF0000 或 RGB)
font_size - 字體大小
font_bg - 背景顏色
line - 干擾線 (最少,最大)
pointBorder - 散點(越大越多,越大越少)
save_type - 保存類型
quality - 品質(zhì)
"""
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):
"""生成驗證碼,并返回圖像內(nèi)容,和驗證碼"""
#生成code
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()
#file對象
fp = BytesIO()
#保存圖像
self._im.save(fp,self._save_type,quality=self._quality)
return fp.getvalue(),self._code
def _str_hex(self,color):
"""轉(zhuǎn)換顏色值為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):
"""生成隨機code """
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 ,這些語句邏輯結(jié)束的位置需要用 {% end %} 做標記
圖片內(nèi)容無需保存到.jpeg中, 具體參考下面
http://en.wikipedia.org/wiki/Data_URI_scheme#HTML
是用mako來在html嵌套python代碼
http://blog.csdn.net/luanruisong/article/details/9414635