diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..417b7bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +__pycache__/* + diff --git a/README.md b/README.md index 44ce0fe..c17862b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# Banter -A fun and interesting script that makes very cool color art in IRC chat +# banter +little script to make irc color art that will probably get you banned + +![irc art of a fox with a santa hat](https://camo.githubusercontent.com/c561d6bb149035725e895178ce744f0c05ed6c55e8d71d8fe01dcce015c8025a/68747470733a2f2f74746d2e73682f646c792e706e67) + # Notice -In servers/channels that don't allow colors or spam you may get muted and banned. Its best to use this in YOUR channel. +In servers/channels that don't allow colors or spam you may get muted and banned. +Its best to use this in YOUR channel or a spam channel. diff --git a/banter.py b/banter.py new file mode 100755 index 0000000..2dae349 --- /dev/null +++ b/banter.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import sys,time +from PIL import Image +from color import closestColor + +ASCIIWIDTH=80 +COLORCHAR='\x03{},{}' # this will be String.format()'ted with two args +FILLER='.' + +if len(sys.argv) < 2: + raise Exception('you must supply an image') + +im = Image.open(sys.argv[1], 'r') +width, height = im.size +pixel_values = list(im.getdata()) + +ipix = width // ASCIIWIDTH # // instead of / to devide with a round number + +asciiHeight = height // ipix // 2 + +for y in range(asciiHeight): + line = [] + lastColor=69420 + + for x in range(ASCIIWIDTH): + color = closestColor(pixel_values[width*(y*(ipix*2))+(x*ipix)]) + if color == lastColor: + colorcode = '' + else: + colorcode =COLORCHAR.format(color, color) + line.append(colorcode+FILLER) + lastColor=color + + print(''.join(line)) + if len(sys.argv) > 2: + time.sleep(float(sys.argv[2])) diff --git a/color.py b/color.py new file mode 100644 index 0000000..9f9edec --- /dev/null +++ b/color.py @@ -0,0 +1,127 @@ +EXTENDEDCOLORS = { +17: "#472100", +18: "#474700", +19: "#324700", +20: "#004700", +21: "#00472c", +22: "#004747", +23: "#002747", +24: "#000047", +25: "#2e0047", +26: "#470047", +27: "#47002a", +29: "#743a00", +30: "#747400", +31: "#517400", +32: "#007400", +33: "#007449", +34: "#007474", +35: "#004074", +36: "#000074", +37: "#4b0074", +38: "#740074", +39: "#740045", +41: "#b56300", +42: "#b5b500", +43: "#7db500", +44: "#00b500", +45: "#00b571", +46: "#00b5b5", +47: "#0063b5", +48: "#0000b5", +49: "#7500b5", +50: "#b500b5", +51: "#b5006b", +53: "#ff8c00", +54: "#ffff00", +55: "#b2ff00", +56: "#00ff00", +57: "#00ffa0", +58: "#00ffff", +59: "#008cff", +60: "#0000ff", +61: "#a500ff", +62: "#ff00ff", +63: "#ff0098", +65: "#ffb459", +66: "#ffff71", +67: "#cfff60", +68: "#6fff6f", +69: "#65ffc9", +70: "#6dffff", +71: "#59b4ff", +72: "#5959ff", +73: "#c459ff", +74: "#ff66ff", +75: "#ff59bc", +77: "#ffd39c", +78: "#ffff9c", +79: "#e2ff9c", +80: "#9cff9c", +81: "#9cffdb", +82: "#9cffff", +83: "#9cd3ff", +84: "#9c9cff", +85: "#dc9cff", +86: "#ff9cff", +87: "#ff94d3", +89: "#131313", +90: "#282828", +91: "#363636", +92: "#4d4d4d", +93: "#656565", +94: "#818181", +95: "#9f9f9f", +96: "#bcbcbc", +97: "#e2e2e2", +98: "#ffffff", +} + + +MIRCCOLORS = { + 1: (0,0,0), + 2: (0,0,127), + 3: (0,147,0), + 4: (255,0,0), + 5: (127,0,0), + 6: (156,0,156), + 7: (252,127,0), + 8: (255,255,0), + 9: (0,252,0), + 10: (0,147,147), + 11: (0,255,255), + 12: (0,0,252), + 13: (255,0,255), + 14: (127,127,127), + 15: (210,210,210) +} + + +colors = {} + +# copy the dict lol +for i in MIRCCOLORS: + colors[i]=MIRCCOLORS[i] + +for i in EXTENDEDCOLORS: + hex=EXTENDEDCOLORS[i].lstrip('#') + + # https://stackoverflow.com/a/29643643/9406294 + rgb=tuple(int(hex[i:i+2], 16) for i in (0, 2, 4)) + #print(rgb) + + colors[i]=rgb + + +COLORS = colors + + +def closestColor(rgb): + r, g, b = rgb + diss = {} + for cc in COLORS: + rc, gc, bc = COLORS[cc] + distance = abs(r-rc) + abs(g-gc) + abs(b-bc) + diss[cc] = distance + return min(diss, key=diss.get) + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2ae5d14 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Pillow==8.0.1 +