fascinus/banter/banter.py

88 lines
2.8 KiB
Python
Raw Normal View History

2023-10-02 02:14:36 +00:00
#!/bin/sh
"""'exec /usr/bin/env python3 -u "$0" "$@" #"""
__doc__ = "little script to make irc color art that will probably get you banned"
# whee, look at this sus shebang workaround to always cause
# unbuffered mode lol
import sys, time, argparse
from PIL import Image, ImageOps
from color import closestColor
import validators
import wget
import subprocess
import glob, os
2023-10-02 02:14:36 +00:00
import requests
2023-10-02 02:14:36 +00:00
def main(imgPath, delay, ASCIIWIDTH, COLORCHAR, FILLER, fileType):
2023-10-02 02:14:36 +00:00
if os.path.exists("image.png"):
os.remove("image.png")
if os.path.exists("image.jpg"):
os.remove("image.jpg")
if os.path.exists("image.webp"):
os.remove("image.webp")
if os.path.exists("output.txt"):
os.remove("output.txt")
2023-10-02 02:14:36 +00:00
if validators.url(imgPath) == True:
print('URL')
2023-10-02 02:14:36 +00:00
print('Downloading image to ' + "/home/node/app/image." + fileType)
2023-10-02 02:14:36 +00:00
#wget.download(imgPath, "/home/node/app/image." + fileType)
imagefile = requests.get(imgPath)
open("/home/node/app/image." + fileType, "wb").write(imagefile.content)
2023-10-02 02:14:36 +00:00
if fileType == "png":
print('PNG')
imgPath = "/home/node/app/image.png"
if fileType == "jpg":
print('JPG')
imgPath = "/home/node/app/image.jpg"
2023-10-02 02:14:36 +00:00
if fileType == "webp":
print('WEBP')
imgPath = "/home/node/app/image.webp"
2023-10-02 02:14:36 +00:00
im = Image.open(imgPath, 'r')
im = ImageOps.scale(im, ASCIIWIDTH / im.width)
width, height = im.size
pixel_values = list(im.getdata())
currentPixel = 0
for y in range(0, height, 2):
line = []
lastColor=69420
for x in range(width):
color = closestColor(pixel_values[width*y+x])
if color == lastColor:
colorcode = ''
else:
colorcode =COLORCHAR.format(color, color)
line.append(colorcode+(FILLER[currentPixel % len(FILLER)]))
lastColor=color
currentPixel+=1
print("".join(line))
with open("output.txt", "a") as f:
print("".join(line), file=f)
if delay:
time.sleep(delay)
sys.stdout.flush()
if __name__ == "__main__":
parser = argparse.ArgumentParser("banter")
parser.add_argument("file")
parser.add_argument("-d", metavar="delay", default=0)
parser.add_argument("-w", metavar="width", default=80)
parser.add_argument("-t", metavar="fileType", default="png")
parser.add_argument("--colorfmt", metavar="format", default="\\x03{},{}")
parser.add_argument("--filler", metavar="filler", default=".")
args = parser.parse_args()
main(
args.file,
float(args.d),
int(args.w),
args.colorfmt.encode().decode("unicode_escape"),
2023-10-02 02:14:36 +00:00
args.filler.encode().decode("unicode_escape"),
str(args.t)
2023-10-02 02:14:36 +00:00
)