Added a flag to enable 24bit color output in images.
authorJoseph Hallett <bogwonch@bogwonch.net>
Thu, 30 Jul 2015 21:44:47 +0000 (22:44 +0100)
committerJoseph Hallett <bogwonch@bogwonch.net>
Thu, 30 Jul 2015 21:44:47 +0000 (22:44 +0100)
rainbowstream/c_image.py
rainbowstream/rainbow.py

index e4d4505..e1bdae4 100644 (file)
@@ -31,12 +31,21 @@ def pixel_print(ansicolor):
     sys.stdout.write('\033[48;5;%sm \033[0m' % (ansicolor))
 
 
     sys.stdout.write('\033[48;5;%sm \033[0m' % (ansicolor))
 
 
-def block_print(lower, higher):
+def block_print(higher, lower):
     """
     Print two pixels arranged above each other with Ansi color.
     Abuses Unicode to print two pixels in the space of one terminal block.
     """
     """
     Print two pixels arranged above each other with Ansi color.
     Abuses Unicode to print two pixels in the space of one terminal block.
     """
-    sys.stdout.write('\033[38;5;%sm\033[48;5;%sm▄\033[0m' % (higher, lower))
+    r0, g0, b0 = lower[:3]
+    r1, g1, b1 = higher[:3]
+
+    if c['24BIT'] is True:
+        sys.stdout.write('\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm▄\033[0m'
+                         % (r1, g1, b1, r0, g0, b0))
+    else:
+        i0 = rgb2short(r0, g0, b0)
+        i1 = rgb2short(r1, g1, b1)
+        sys.stdout.write('\033[38;5;%sm\033[48;5;%sm▄\033[0m' % (i1, i0))
 
 
 def image_to_display(path, start=None, length=None):
 
 
 def image_to_display(path, start=None, length=None):
@@ -63,9 +72,7 @@ def image_to_display(path, start=None, length=None):
             y = real_y * 2
             p0 = i.getpixel((x, y))
             p1 = i.getpixel((x, y+1))
             y = real_y * 2
             p0 = i.getpixel((x, y))
             p1 = i.getpixel((x, y+1))
-            r0, g0, b0 = p0[:3]
-            r1, g1, b1 = p1[:3]
-            block_print(rgb2short(r0, g0, b0), rgb2short(r1, g1, b1))
+            block_print(p1, p0)
         sys.stdout.write('\n')
 
 
         sys.stdout.write('\n')
 
 
index 53fcd63..cf25883 100644 (file)
@@ -68,6 +68,11 @@ def parse_arguments():
         action='store_true',
         help='Display all image on terminal.')
     parser.add_argument(
         action='store_true',
         help='Display all image on terminal.')
     parser.add_argument(
+        '-24',
+        '--color-24bit',
+        action='store_true',
+        help='Display images using 24bit color codes.')
+    parser.add_argument(
         '-ph',
         '--proxy-host',
         help='Use HTTP/SOCKS proxy for network connections.')
         '-ph',
         '--proxy-host',
         help='Use HTTP/SOCKS proxy for network connections.')
@@ -233,6 +238,7 @@ def init(args):
     c['message_dict'] = []
     # Image on term
     c['IMAGE_ON_TERM'] = args.image_on_term
     c['message_dict'] = []
     # Image on term
     c['IMAGE_ON_TERM'] = args.image_on_term
+    c['24BIT'] = args.color_24bit
     set_config('IMAGE_ON_TERM', str(c['IMAGE_ON_TERM']))
     # Check type of ONLY_LIST and IGNORE_LIST
     if not isinstance(c['ONLY_LIST'], list):
     set_config('IMAGE_ON_TERM', str(c['IMAGE_ON_TERM']))
     # Check type of ONLY_LIST and IGNORE_LIST
     if not isinstance(c['ONLY_LIST'], list):
@@ -1291,7 +1297,7 @@ def switch():
             return
         # Kill old thread
         g['stream_stop'] = True
             return
         # Kill old thread
         g['stream_stop'] = True
-        try: 
+        try:
             stuff = g['stuff'].split()[1]
         except:
             stuff = None
             stuff = g['stuff'].split()[1]
         except:
             stuff = None