DEV Community

Cover image for Bring Your Images to Life : A Guide to Python-Based ASCII Art ๐Ÿ
Saif Matab
Saif Matab

Posted on

1

Bring Your Images to Life : A Guide to Python-Based ASCII Art ๐Ÿ

Have you ever encountered those captivating images crafted entirely from text characters? That's the magic of ASCII art, a creative method for representing visual information using text. This article delves into Python code that empowers you to transform your favorite images into this unique format.

Understanding the Code

  • We'll be working with Python and the Pillow library (often shortened to PIL) for image manipulation. Here's a breakdown of the essential functions:

1.Resizing Images (resize_img):

def resize_img(image, new_width=100):
     width, height = image.size
     ratio = height / width
     new_height = int(new_width * ratio)
     resized_img = image.resize((new_width, new_height))
     return resized_img
Enter fullscreen mode Exit fullscreen mode
  • This function receives an image and an optional new desired width.
  • It calculates the proportional height based on the original aspect ratio to maintain proportions during resizing.

2.Converting to Grayscale(pixel_to_grayscale):

def pixel_to_grayscale(image):
  grayscale_img = image.convert("L")  # "L" mode for grayscale
  return grayscale_img
Enter fullscreen mode Exit fullscreen mode
  • This function converts the image from its original colors to grayscale.
  • Grayscale representations simplify the process of mapping pixel brightness levels to ASCII characters later

3.Converting Pixels to ASCII(pixel_to_ascii):

def pixel_to_ascii(image):
  pixels = image.getdata()
  characters = "".join(ASCII_CHAR[pixel // 25] for pixel in pixels)
  return characters

ASCII_CHAR = ["@", "#", "S", "%", "?", "*", "+", ";", ":", ",", "."]
Enter fullscreen mode Exit fullscreen mode
  • This function is the core of the conversion.
  • It iterates through each pixel in the grayscale image and assigns a corresponding ASCII character based on its brightness.
  • The ASCII_CHAR list acts as a reference, with darker characters representing darker pixels for a textured effect.

4.Main Function (main):

def main(new_width=100):
  path = input("Enter the path of the image: \n")
  try:
    image = Image.open(path)
  except Exception as e:
    print(f"{path} is not a valid path!")
    print(e)
    return

  # Convert to grayscale and ASCII art
  grayscale_image = pixel_to_grayscale(resize_img(image))
  new_image_data = pixel_to_ascii(grayscale_image)

  pixel_nb = len(new_image_data)
  ascii_img = "\n".join(new_image_data[i:i + new_width] for i in range(0, pixel_nb, new_width))

  print(ascii_img)  # Print the ASCII art to the console

  try:
    with open("asciiArt.txt", "w") as c:
      try:
        c.write(ascii_img)
      except Exception as e:
        print(f"Error while writing to the file: {e}")
  except Exception as e:
    print(f"Error while opening the file: {e}")

main()
Enter fullscreen mode Exit fullscreen mode
  • This function brings everything together.
  • It prompts the user for an image path, handles potential exceptions, and sequentially calls other functions: Resizes the image.
  • Converts it to grayscale.
  • Converts pixels to ASCII characters.
  • Prints the ASCII art to the console.
  • Attempts to save the ASCII art to a text file named โ€œasciiArt.txtโ€

Explore the full code and contribute here: [https://github.com/Kernel-rb/Image2ASCII]

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where youโ€™ll build it, break it, debug it, and fix it. Youโ€™ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good olโ€™ AI to find and fix issues fast.

RSVP here โ†’

Top comments (0)

Eliminate Context Switching and Maximize Productivity

Pieces.app

Pieces Copilot is your personalized workflow assistant, working alongside your favorite apps. Ask questions about entire repositories, generate contextualized code, save and reuse useful snippets, and streamline your development process.

Learn more

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay