Python
import PIL

# Caractères utilisés pour "dessiner"
C_ascii = ["@", "#", "S", "%", "?", "*", "+", ";", ":", ",", "."]

# Recadre l'image
def resize_image(image, new_width=100):
    width, height = image.size
    ratio = height/width
    new_height = int(new_width * ratio)
    new_image = image.resize((new_width, new_height))
    return(new_image)

# Transforme l'image en gris
def griser(image):
    grayscale_image = image.convert("L")
    return(grayscale_image)
    
# Transforme chaque pixel gris en un caractère
def pixels_to_ascii(image):
    pixels = image.getdata()
    characters = "".join([C_ascii[pixel//25] for pixel in pixels])
    return(characters)    

def main(new_width=100):
    # Ouvre l'image
    nom = input("Entrez le nom complet de l'image importer")
    try:
        image = PIL.Image.open(nom)
    except:
        print(nom, "nom incorrect ou image non importée")
        return
  
    # convertion  
    new_image_data = pixels_to_ascii(griser(resize_image(image)))
    
    # format
    pixel_count = len(new_image_data)  
    ascii_image = "\n".join([new_image_data[index:(index+new_width)] for index in range(0, pixel_count, new_width)])
    
    # resultat
    print(ascii_image)
    
    # sauvegarde le resultat "ascii_image.txt"
    with open("ascii_image.txt", "w") as f:
        f.write(ascii_image)
 
main()