From a0dbd0b8a9b7865b40d2c141b371db505ac0bf54 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sun, 12 Mar 2017 17:40:33 +0100 Subject: [PATCH] new png feature: transparency --- lib/wttrin_png.py | 49 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/lib/wttrin_png.py b/lib/wttrin_png.py index 932c2f9..b9ef5e3 100644 --- a/lib/wttrin_png.py +++ b/lib/wttrin_png.py @@ -28,7 +28,10 @@ import pyte.screens # import unicodedata2 -MYDIR = os.path.abspath(os.path.dirname( os.path.dirname('__file__'))) +MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) +sys.path.append("%s/lib/" % MYDIR) +import parse_query + PNG_CACHE = os.path.join(MYDIR, "cache/png") COLS = 180 @@ -111,7 +114,7 @@ def script_category(char): else: return cat -def gen_term(filename, buf): +def gen_term(filename, buf, options=None): buf = strip_buf(buf) cols = len(buf[0]) rows = len(buf) @@ -151,9 +154,33 @@ def gen_term(filename, buf): y_pos += CHAR_HEIGHT #sys.stdout.write('\n') + if 'transparency' in options: + transparency = options.get('transparency', '255') + try: + transparency = int(transparency) + except: + transparceny = 255 + + if transparency < 0: + transparency = 0 + + if transparency > 255: + transparency = 255 + + image = image.convert("RGBA") + datas = image.getdata() + + new_data = [] + for item in datas: + new_item = tuple(list(item[:3]) + [transparency]) + new_data.append(new_item) + + image.putdata(new_data) + + image.save(filename) -def typescript_to_one_frame(png_file, text): +def typescript_to_one_frame(png_file, text, options=None): """ Render text (terminal sequence) in png_file """ @@ -169,7 +196,7 @@ def typescript_to_one_frame(png_file, text): stream.feed(text) - gen_term(png_file, screen.buffer) + gen_term(png_file, screen.buffer, options=options) # # wttr.in related functions @@ -189,6 +216,7 @@ def parse_wttrin_png_name(name): """ parsed = {} + to_be_parsed = {} if name.lower()[-4:] == '.png': parsed['filetype'] = 'png' @@ -197,7 +225,7 @@ def parse_wttrin_png_name(name): parts = name.split('_') parsed['location'] = parts[0] - for part in parts: + for part in parts[1:]: if re.match('(?:[0-9]+)x', part): parsed['width'] = part[:-1] elif re.match('x(?:[0-9]+)', part): @@ -206,7 +234,11 @@ def parse_wttrin_png_name(name): parsed['width'], parsed['height'] = part.split('x', 1) elif '=' in part: arg, val = part.split('=', 1) - parsed[arg] = val + to_be_parsed[arg] = val + else: + to_be_parsed[part] = '' + + parsed.update(parse_query.parse_query(to_be_parsed)) return parsed @@ -246,6 +278,9 @@ def make_wttr_in_png(png_name, options=None): """ parsed = parse_wttrin_png_name(png_name) + print "------" + print parsed + print "------" # if location is MyLocation it should be overriden # with autodetected location (from options) @@ -273,6 +308,6 @@ def make_wttr_in_png(png_name, options=None): text = requests.get(url).text.replace('\n', '\r\n') curl_output = text.encode('utf-8') - typescript_to_one_frame(cached_png_file, curl_output) + typescript_to_one_frame(cached_png_file, curl_output, options=parsed) return cached_png_file