2 from functools
import partial
9 This file is borrowed from following gist:
10 https://gist.github.com/MicahElliott/719710
11 It's too slow in compare with C program.
14 CLUT
= [ # color look-up table
17 # Primary 3-bit (8 colors). Unique representation!
27 # Equivalent "bright" versions of original 8 colors.
284 short2rgb_dict
= dict(CLUT
)
286 for k
, v
in short2rgb_dict
.items():
287 rgb2short_dict
[v
] = k
288 return rgb2short_dict
, short2rgb_dict
290 RGB2SHORT_DICT
, SHORT2RGB_DICT
= _create_dicts()
293 def short2rgb(short
):
294 return SHORT2RGB_DICT
[short
]
297 def pixel_print(ansicolor
):
298 sys
.stdout
.write('\033[48;5;%sm \033[0m' % (ansicolor
))
301 def hex_to_rgb(value
):
302 value
= value
.lstrip('#')
304 return tuple(int(value
[i
:i
+ lv
/ 3], 16) for i
in range(0, lv
, lv
/ 3))
308 return '%02x%02x%02x' % rgb
311 def rgb2short(r
, g
, b
):
312 dist
= lambda s
, d
: (s
[0] - d
[0]) ** 2 + \
313 (s
[1] - d
[1]) ** 2 + (s
[2] - d
[2]) ** 2
314 ary
= [hex_to_rgb(hex) for hex in RGB2SHORT_DICT
]
315 m
= min(ary
, key
=partial(dist
, (r
, g
, b
)))
316 return RGB2SHORT_DICT
[rgb_to_hex(m
)]
319 def image_to_display(path
, start
=None, length
=None):
320 rows
, columns
= os
.popen('stty size', 'r').read().split()
324 length
= int(columns
) - 2 * start
326 i
= i
.convert('RGBA')
329 width
= min(w
, length
)
330 height
= int(float(h
) * (float(width
) / float(w
)))
332 i
= i
.resize((width
, height
), Image
.BICUBIC
)
333 height
= min(height
, IMAGE_MAX_HEIGHT
)
335 for y
in xrange(height
):
337 for x
in xrange(width
):
338 p
= i
.getpixel((x
, y
))
340 pixel_print(rgb2short(r
, g
, b
))
343 if __name__
== '__main__':
344 image_to_display(sys
.argv
[1])