3 from werkzeug.exceptions import HTTPException |
3 from werkzeug.exceptions import HTTPException |
4 import wsgiref.handlers |
4 import wsgiref.handlers |
5 |
5 |
6 from PIL import Image, ImageDraw, ImageFont, ImageEnhance |
6 from PIL import Image, ImageDraw, ImageFont, ImageEnhance |
7 from cStringIO import StringIO |
7 from cStringIO import StringIO |
8 import random, itertools |
8 import random, itertools, time |
9 |
9 |
10 if not hasattr(itertools, 'izip_longest') : |
10 if not hasattr(itertools, 'izip_longest') : |
11 |
11 |
12 def izip_longest(*args, **kwds): |
12 def izip_longest(*args, **kwds): |
13 # izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- |
13 # izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- |
295 Option('font-size', False, int, Defaults.font_size, None), |
295 Option('font-size', False, int, Defaults.font_size, None), |
296 Option('bg-color', False, arg_color, Defaults.bg_color, None), |
296 Option('bg-color', False, arg_color, Defaults.bg_color, None), |
297 Option('line-spacing', False, int, Defaults.line_spacing, None), |
297 Option('line-spacing', False, int, Defaults.line_spacing, None), |
298 Option('sharpness', False, float, Defaults.sharpness, None), |
298 Option('sharpness', False, float, Defaults.sharpness, None), |
299 Option('image-format', False, str, Defaults.img_format, IMAGE_FORMATS.keys()), |
299 Option('image-format', False, str, Defaults.img_format, IMAGE_FORMATS.keys()), |
|
300 Option('seed', False, int, None, None), |
300 ) |
301 ) |
301 |
302 |
302 def handle_help (req) : |
303 def handle_help (req) : |
303 return werkzeug.Response('\n'.join( |
304 return werkzeug.Response('\n'.join( |
304 "%-15s %4s %-10s %-20s %s" % data for data in [ |
305 "%-15s %4s %-10s %-20s %s" % data for data in [ |
325 opts['text'] = TEXT_BY_LANG[opts['lang']] |
326 opts['text'] = TEXT_BY_LANG[opts['lang']] |
326 |
327 |
327 if opts['font-size'] > FONT_SIZE_MAX : |
328 if opts['font-size'] > FONT_SIZE_MAX : |
328 raise ValueError(opts['font-size']) |
329 raise ValueError(opts['font-size']) |
329 |
330 |
|
331 if opts['seed'] is None : |
|
332 opts['seed'] = time.time() |
|
333 |
330 # load/prep resources |
334 # load/prep resources |
|
335 random.seed(opts['seed']) |
331 data = build_data(opts['text'], opts['chars'], opts['colors'], opts['random-chars'], opts['random-text'], opts['random-text-char']) |
336 data = build_data(opts['text'], opts['chars'], opts['colors'], opts['random-chars'], opts['random-text'], opts['random-text-char']) |
332 font = load_font(opts['font'], opts['font-size']) |
337 font = load_font(opts['font'], opts['font-size']) |
333 |
338 |
334 # render the image |
339 # render the image |
335 img = render_img(data, font, opts['bg-color'], opts['line-spacing']) |
340 img = render_img(data, font, opts['bg-color'], opts['line-spacing']) |