import gradio as gr from PIL import Image import numpy as np import tempfile def convert_to_ascii(image, char_set, bg_toggle, color_toggle): width = 100 img = image.convert('RGB') aspect_ratio = img.height / img.width height = int(width * aspect_ratio) img = img.resize((width, height)) pixels = np.array(img) if char_set == "Symbols": chars = "@%#*+=-:. " elif char_set == "Inverted": chars = " .:-=+*#%@" elif char_set == "Numbers": chars = "0123456789" ascii_art = "" html_ascii_art = "" for i in range(height): for j in range(width): r, g, b = pixels[i, j] brightness = (r + g + b) / 3 char_index = int((brightness / 255) * (len(chars) - 1)) char = chars[len(chars) - 1 - char_index] if bg_toggle and r == g == b == 255: ascii_art += " " html_ascii_art += " " else: if color_toggle: html_ascii_art += f'{char}' ascii_art += char else: ascii_art += char html_ascii_art += char ascii_art += "\n" html_ascii_art += "
" if color_toggle: temp = tempfile.NamedTemporaryFile(delete=False, suffix=".html") temp.write(html_ascii_art.encode('utf-8')) else: temp = tempfile.NamedTemporaryFile(delete=False, suffix=".txt") temp.write(ascii_art.encode('utf-8')) temp.close() return html_ascii_art, temp.name def create_interface(): image_input = gr.Image(type="pil", label="Upload Image") char_set_input = gr.Radio(choices=["Symbols", "Inverted", "Numbers"], label="Character Set") bg_toggle_input = gr.Checkbox(label="Enable Background Transparency", value=False) color_toggle_input = gr.Checkbox(label="Enable Color", value=True) output_html = gr.HTML(label="ASCII Art Output") download_output = gr.File(label="Download ASCII Art") interface = gr.Interface( fn=convert_to_ascii, inputs=[image_input, char_set_input, bg_toggle_input, color_toggle_input], outputs=[output_html, download_output], live=True, title="Image to ASCII Converter", description="""Convert your images into ASCII art instantly. The website [JesseJesse.xyz](https://ascii.JesseJesse.xyz) Download the [Android](https://ascii.JesseJesse.xyz/ascii.apk) App """ ) return interface if __name__ == "__main__": interface = create_interface() interface.launch()