X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;ds=sidebyside;f=rainbowstream%2Fc_image.py;h=ec0e47e5114dd278a561cf19ce1c3163913a7b25;hb=b9de72743d9e45418ba4d12f1ee405c89811f130;hp=be3d52b28f4146ce05b735c324adbb45a2a1ef50;hpb=60431c3bca32cf69f00f680dd5d4475d0a365ddc;p=rainbowstream.git diff --git a/rainbowstream/c_image.py b/rainbowstream/c_image.py index be3d52b..ec0e47e 100644 --- a/rainbowstream/c_image.py +++ b/rainbowstream/c_image.py @@ -1,8 +1,11 @@ -from PIL import Image,ImageFilter -from functools import partial +from PIL import Image 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__':