X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fc_image.py;h=ec0e47e5114dd278a561cf19ce1c3163913a7b25;hp=a9e73de33b14b20d8b1d7a08581eaafe9d7d01a3;hb=f5677fb1d3a9e2aa06971500b2c244dcdbe43a3f;hpb=0418d4438a6d413aacdb630b8a0bcbbc76a23e0e diff --git a/rainbowstream/c_image.py b/rainbowstream/c_image.py index a9e73de..ec0e47e 100644 --- a/rainbowstream/c_image.py +++ b/rainbowstream/c_image.py @@ -1,8 +1,11 @@ from PIL import Image -from functools import partial from os.path import join, dirname, getmtime, exists, expanduser +from .config import * + +import ctypes +import sys +import os -import ctypes, sys, os def call_c(): library = expanduser('~/.image.so') @@ -10,33 +13,35 @@ def call_c(): if not exists(library) or getmtime(sauce) > getmtime(library): build = "gcc -fPIC -shared -o %s %s" % (library, sauce) assert os.system(build + " >/dev/null 2>&1") == 0 - image_c= ctypes.cdll.LoadLibrary(library) + image_c = ctypes.cdll.LoadLibrary(library) image_c.init() return image_c.rgb_to_ansi rgb2short = call_c() - + + def pixel_print(ansicolor): sys.stdout.write('\033[48;5;%sm \033[0m' % (ansicolor)) - + + def image_to_display(path): - i = Image.open(path) + i = Image.open(path) i = i.convert('RGBA') - w,h = i.size + w, h = i.size i.load() rows, columns = os.popen('stty size', 'r').read().split() - width = min(w, int(columns)-2*6) + width = min(w, int(columns) - 2 * IMAGE_SHIFT) height = int(float(h) * (float(width) / float(w))) height //= 2 - i = i.resize((width, height), Image.BICUBIC) - height = min(height,30) + i = i.resize((width, height), Image.ANTIALIAS) + height = min(height, IMAGE_MAX_HEIGHT) for y in xrange(height): - print ' '*6 , + print ' ' * IMAGE_SHIFT, for x in xrange(width): - p = i.getpixel((x,y)) + p = i.getpixel((x, y)) r, g, b = p[:3] - pixel_print(rgb2short(r,g,b)) + pixel_print(rgb2short(r, g, b)) print '' if __name__ == '__main__':