Skip to content

Instantly share code, notes, and snippets.

@cuihaoleo
Last active August 29, 2015 15:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cuihaoleo/e4952aaaab302aead6a6 to your computer and use it in GitHub Desktop.
Save cuihaoleo/e4952aaaab302aead6a6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
from PIL import Image
import concurrent.futures
from colorfinder import hex2term_accurate, hex2term_quick
from lolcat import get_terminal_size
import argparse
if __name__ == "__main__":
default_size = get_terminal_size()
parser = argparse.ArgumentParser()
parser.add_argument("file", help="path to the image", type=Image.open)
parser.add_argument("-c", "--col", help="number of cols",
type=int, default=default_size[1])
parser.add_argument("-r", "--row", help="number of rows",
type=int, default=default_size[0])
parser.add_argument("-f", "--fast", help="use a faster algorithm",
action="store_true")
args = parser.parse_args()
coln, rown = args.col, args.row
hex2term = hex2term_quick if args.fast else hex2term_accurate
im = args.file.resize((coln, rown), Image.ANTIALIAS).convert("RGB")
def generate_line(row):
ret = ""
for j in range(coln):
r, g, b = im.getpixel((j, row))
res = hex2term("#%02x%02x%02x" % (r, g, b))
ret += '\x1b[48;5;{c}m \x1b[0m'.format(c=res)
return ret
with concurrent.futures.ProcessPoolExecutor() as executor:
for i in executor.map(generate_line, range(rown)):
print(i)
@cuihaoleo
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment