from PIL import Image, ImageDraw, ImageFont import numpy as np def generer_images_ascii(taille_cellule, font_path="arial.ttf", font_size=14): caracteres_ascii = "@%#*+=-:. " images_ascii = {} font = ImageFont.truetype(font_path, font_size) for caractere in caracteres_ascii: image = Image.new('L', taille_cellule, "black") draw = ImageDraw.Draw(image) w, h = draw.textsize(caractere, font=font) draw.text(((taille_cellule[0]-w)/2, (taille_cellule[1]-h)/2), caractere, fill="white", font=font) images_ascii[caractere] = np.array(image) return images_ascii def comparer_cellule_avec_ascii(cellule, images_ascii): scores = {} for caractere, image_ascii in images_ascii.items(): difference = np.abs(cellule - image_ascii) score = np.mean(difference) scores[caractere] = score return min(scores, key=scores.get) def charger_image_et_convertir_ascii(chemin, taille_cellule=(8, 8), font_path="arial.ttf", font_size=14): image = Image.open(chemin) image = image.convert('L') largeur, hauteur = image.size pixels = np.array(image) images_ascii = generer_images_ascii(taille_cellule, font_path, font_size) resultat = "" for i in range(0, hauteur, taille_cellule[1]): for j in range(0, largeur, taille_cellule[0]): cellule = pixels[i:i+taille_cellule[1], j:j+taille_cellule[0]] if cellule.shape[0] != taille_cellule[1] or cellule.shape[1] != taille_cellule[0]: continue caractere = comparer_cellule_avec_ascii(cellule, images_ascii) resultat += caractere resultat += '\n' return resultat # Exemple d'utilisation chemin_image = "chemin/vers/votre/image.jpg" taille_cellule = (8, 8) # Ajustez selon les besoins font_path = "arial.ttf" # Ajustez le chemin vers la police si nécessaire font_size = 14 # Ajustez la taille de la police si nécessaire resultat_ascii = charger_image_et_convertir_ascii(chemin_image, taille_cellule, font_path, font_size) print(resultat_ascii)